یافتن خطاها در اندازه گیری های DAX همیشه دشوار بوده است، زیرا یک اندازه گیری DAX نتایج متفاوتی را در سلول های مختلف یک گزارش ایجاد می کند و ما راه مستقیمی برای اجرای گام به گام کد در Power BI نداریم. این مقاله چهار تکنیک را برای یافتن خطا در فرمول DAX شرح می دهد: ما با دستکاری متغیرها که به هیچ ابزار خارجی نیاز ندارد شروع می کنیم و سپس می بینیم که چگونه از ویژگی های موجود در DAX Studio، DAX Debug Output و Tabular Editor 3 استفاده کنیم.
این مدل شامل اندازه گیری میانگین تراکنش است که میانگین مقدار تراکنش ها را برمی گرداند:
در جدول فروش اندازه گیری کنید
میانگین تراکنش:= AVERAGEX (فروش، فروش[تعداد] * فروش[قیمت خالص])
فرض کنید باید معیاری ایجاد کنیم که تفاوت درصدی بین میانگین کل تراکنش نمایش داده شده در یک گزارش و میانگین تراکنش را برای مجموعه یکسانی از محصولات در تمام دوره های نمایش داده شده در یک تصویر برگرداند. از آنجا که اندازه گیری باید به صورت پویا محاسبه را بر اساس فیلترهای اعمال شده در گزارش تغییر دهد، ما یک محاسبه بر اساس نسبتی بین مقدار میانگین تراکنش و میانگین تراکنش محاسبه شده با ALLSELECTED ایجاد می کنیم.
نسخه صحیح فرمول به صورت زیر است:
در جدول فروش اندازه گیری کنید
میانگین دلتا (درست) := DIVIDE ( [میانگین تراکنش]، محاسبه ( [میانگین تراکنش]، ALLSELECTED ( 'تاریخ' ) ) - 1
گفتنی است، ما به یک نسخه با باگ برای رفع اشکال کد DAX نیاز داریم. بنابراین، ما از این نسخه نادرست استفاده می کنیم که تاریخ در ALLSELECTED وجود ندارد:
در جدول فروش اندازه گیری کنید
دلتا میانگین 1 := DIVIDE ( [میانگین تراکنش]، CALCULATE ( [میانگین تراکنش]، ALLSELECTED ( ) ) - 1
گزارش اعدادی را نشان می دهد که صحیح نیستند. دلتا میانگین 1 باید 0٪ در ستون کل باشد زیرا هر سال باید با مقدار کل میانگین تراکنش برای هر مارک مقایسه شود.

همانطور که پیش بینی می شد، محاسبه اشتباه است. چگونه بفهمیم کدام قسمت از محاسبه باید ثابت شود؟ایده "اشکال زدا" این است که محاسبه را مرحله به مرحله بررسی کنیم تا زمانی که نتیجه میانی پیدا کنیم که با آنچه ما انتظار داریم مطابقت نداشته باشد.
نوشتن عبارات DAX با استفاده از متغیرها می تواند خوانایی کد را بهبود بخشد و بازرسی یک مرحله محاسبه متوسط در گزارش را آسان تر کند. برای مثال، می توانیم محاسبه میانگین دلتا را به این صورت بازنویسی کنیم:
در جدول فروش اندازه گیری کنید
Delta AVG 2: = var currentValue = [معامله AVG] var ReferenceValue = محاسبه ([معامله AVG] ، AllSelected ()) var currentDelta = جریان Value - ReferenceValue var Result = Divide (CurrentDelta ، ReferenceValue) نتیجه بازگشت
مزیت استفاده از متغیر نهایی به نام نتیجه این است که ما می توانیم به راحتی مقدار برگشتی را با بازگشت تغییر دهیم و با بازیابی بیانیه نتیجه بازده مورد انتظار ، مقدار نهایی را بازیابی کنیم. به عنوان مثال ، می توانیم با تغییر آخرین خط اندازه گیری ، مقدار متغیر مرجع Value را بازرسی کنیم:
در جدول فروش اندازه گیری کنید
Delta AVG 2: = var currentValue = [معامله AVG] var ReferenceValue = محاسبه ([معامله AVG] ، AllSelected ()) var currentDelta = جریان Value - ReferenceValue نتیجه = Divide (CurrentDelta ، ReferenceValue) بازگشت مرجع
این گزارش ارزش معامله AVG را که با استفاده از Allledlected در گزارش محاسبه می شود ، نشان می دهد. این تعداد در قالب درصد نمایش داده می شود ، اما این مهم نیست زیرا می توانیم ببینیم که مقدار برای همه سلولهای گزارش یکسان است.

براساس نیازهای ما ، انتظار داشتیم که ارزش کل Delta AVG 2 را در هر سطر هر سال تکرار کنیم. با این حال ، هر ردیف (هر مارک) باید ارزش متفاوتی داشته باشد. ما می بینیم که شماره نمایش داده شده در Delta AVG 2 اکنون همیشه یکسان است و با کل معامله AVG برای همه سالها و تمام مارک های گزارش مطابقت دارد. شماره ای که می بینیم (84108. 60 ٪) فقط مقدار 841. 09 ضرب شده توسط 100 است. تفاوت ناشی از گرد شدن اعمال شده برای معامله AVG است که با دو رقم پس از نقطه اعشاری نمایش داده می شود.
اکنون می توانیم با استفاده از Allselected فقط برای جدول تاریخ ، محاسبه را برای مرجع Value اصلاح کنیم:
در جدول فروش اندازه گیری کنید
Delta Avg 2: = var currentValue = [معامله AVG] var ReferenceValue = محاسبه ([معامله AVG] ، AllSelected ('Date')) var currentDelta = جریان Value - ReferenceValue var نتیجه = تقسیم (جریان دیستلا ، مرجع) بازگرداندن مرجع Valueueمقدار نمایش داده شده توسط Delta AVG 2 اکنون برای هر مارک متفاوت است - اما برای هر سال تکرار می شود ، مقدار نمایش داده شده توسط معامله AVG برای کل سالهای منتخب.

اکنون بیانیه نتیجه بازگشت را بازیابی می کنیم تا نتیجه صحیح را بدست آوریم:
در جدول فروش اندازه گیری کنید
Delta Avg 2: = var currentValue = [معامله AVG] var ReferenceValue = محاسبه ([معامله AVG] ، AllSelected ('Date')) var currentDelta = جریان Value - ReferenceValue VAR نتیجه = تقسیم (جریان دیستلا ، مرجع)) نتیجه بازگشتاین گزارش اکنون به درستی کار می کند ، و 0 ٪ در کل ستون Delta AVG 2 گزارش می دهد.

استفاده از متغیرها برای اشکال زدایی کد DAX نیازی به ابزارهای اضافی ندارد. آنچه لازم دارد دستکاری در بیان DAX است ، برای اصلاح نتیجه اندازه گیری و در نتیجه بررسی مرحله میانی یک محاسبه در گزارش.
با استفاده از استودیو DAX ، می توانیم نمایش داده های DAX را اجرا کنیم و بدون لمس مدل اصلی ، بیان پرس و جو و تعریف اندازه گیری را اصلاح کنیم. این یک سطح انعطاف پذیری را به ما ارائه می دهد زیرا گزینه های مختلفی را ارائه می دهد: ما می توانیم با استفاده از آنالایزر عملکرد در Power BI ، پرس و جو تولید شده برای تصویری را ضبط کنیم و سپس آن پرس و جو را در استودیوی DAX با تعریف محلی از اندازه گیری اجرا کنیم ، همچنین به عنوان یکاندازه گیری پرس و جواندازه گیری پرس و جو بدون خطر تغییر در اقدامات تعریف شده در مدل داده آسان است. پس از شناسایی مشکل برای رفع مشکل ، لازم نیست نسخه اصلی اقدامات اصلاح شده را بازیابی کنیم ، همانطور که در بخش قبلی انجام دادیم که در آن اندازه گیری را در مدل با استفاده از متغیرها تغییر دادیم.
این پرس و جو DAX است که در آن تعریف محلی Delta AVG 1 را اضافه کردیم:
اندازه گیری ---- مدل شروع می شود ---- اندازه گیری [Delta AVG 1] = Divide ([معامله AVG] ، محاسبه ([معامله AVG] ، Allselected ()))-1 ---- اندازه گیری مدل-پایان- var __ds0filtertable = درمان (<2018, 2019>، "تاریخ" [سال]) var __ds0core = summarizecolumns (rollupaddissubtotal ("محصول" [برند] ، "isgrandtotalrowtotal") ، rollupaddissubtotal ("تاریخ" [سال] "isgrandtotalcolumntotal") ، __dds0filtertable ، __dds0filtertable ، __dds0filtertable ،[معامله avg] ، "delta_avg_1" ، "فروش" [Delta avg 1]) var __ds0primarywindowed = topn (102 ، خلاصه "(محصول" (__ds0core] ، [brand] ، [isgrandtotalrowtotal]) ، [isgrandtotalrowtotalrowtotal] ، 0 ، ".[برند] ، 1) var __ds0secondarybase = خلاصه (__ds0core ، "تاریخ" [سال] ، [isgrandtotalcolumntotal]) var __ds0secondary = topn (102 ، __ds0secondarybase ، [iSgrandtotalcolumntotal] ، 1 ، 1 ، "= NaturalLeftouterJoin (__ds0primarywindowed ، switeuteWithIndex (__ds0core ، "columnindex" ، __ds0secondary ، [isgrandtotalcolumntotal] ، ascry order [asc]) yds0secondyrdrymary [isgrandtotalscolumnertalmation] توسط [isgrandtotalrowtotal] desc ، "محصول" [برند] ، [ColumnIndex]نتیجه یک پرس و جو DAX با طرح بصری یک ماتریس قدرت BI مطابقت ندارد: هر نقطه داده در بصری در نتیجه پرس و جو DAX با یک ردیف متفاوت مطابقت دارد. بنابراین ، هر سطر ماتریس در نتیجه پرس و جو با سه ردیف مطابقت دارد ، یکی برای هر ستون ماتریس (0 برای 2018 ، 1 برای 2019 و 2 برای کل).

ما می توانیم تعریف سنجش پرس و جو Delta AVG 1 را تغییر دهیم تا فقط مخرج مورد استفاده در تقسیم را برگرداند:
کد قطعه DAX
---- اقدامات مدل شروع می شود ---- اندازه گیری اندازه [Delta AVG 1] = // Divide (// [معامله AVG] ، محاسبه ([معامله AVG] ، Allselected ()) //)-1 ----اندازه گیری مدل پایان ----
با استفاده مجدد از پرس و جو ، می بینیم که نتیجه Delta AVG 1 برای همه ردیف ها ، صرف نظر از برند و سال (سال مربوط به ColumnIndex است) یکسان است.

هنگامی که ما تشخیص دادیم که Allselected همانطور که می خواهیم کار نمی کند - باید بدون توجه به سال ، اما مقادیر مختلفی را برای مارک های مختلف برای یک برند فراهم کند - ما با ارائه جدول تاریخ به عنوان آرگومان ، عملکرد Allselected را برطرف می کنیم:
کد قطعه DAX
---- اقدامات مدل شروع می شود ---- اندازه گیری اندازه گیری [Delta AVG 1] = // Divide (// [معامله AVG] ، محاسبه ([معامله AVG] ، AllSelected ('Date') //)-1---- اندازه گیری مدل پایان ----این نسخه از اندازه گیری مخرج مناسب برای نسبت ما را ارائه می دهد ، که یک کپی از مقدار برگشتی برای ColumnIndex 2 است و با ستون کل در بصری ماتریس Power BI مطابقت دارد.

اکنون می توانیم خطوط Delta AVG 1 را که قبلاً هنگام تجزیه و تحلیل مخرج اظهار نظر کردیم ، از بین ببریم:
کد قطعه DAX
---- اقدامات مدل شروع می شود ---- اندازه گیری [Delta AVG 1] = Divide ([معامله AVG] ، محاسبه ([معامله AVG] ، Allselected ('Date')))-1 ---- اندازه گیری مدل----نتیجه اکنون صحیح است - تعداد به جای درصد به عنوان یک نقطه شناور نمایش داده می شود زیرا DAX Studio از قالب اندازه گیری استفاده نمی کند. این تعداد برای کل سالهای انتخاب شده باید صفر باشد ، مربوط به ColumnIndex برابر با 2.

شما می توانید با تغییر نام ستون - خط 17 پرس و جو DAX - و استفاده از نماد ٪ به عنوان بخشی از نام ستون ، تجسم را به عنوان درصد در استودیوی DAX اجرا کنید.

هنگامی که ما اندازه گیری در استودیوی DAX را تأیید کردیم ، هنوز باید تغییرات را در تعریف اندازه گیری در دسک تاپ Power BI اعمال کنیم. در واقع ، استودیو DAX نمی تواند ساختار و داده های مدل مورد تجزیه و تحلیل را تغییر دهد.
با استفاده از Allselected ، ما مجبور شدیم از یک summarizecolumns استفاده کنیم تا زمینه فیلتر سایه استفاده شده توسط Alllected در این گزارش را حفظ کنیم. هنگامی که شما با چنین نیاز خاصی سر و کار ندارید ، می توان استفاده از استودیو DAX را برای ارزیابی یک اندازه گیری برای یک سلول واحد آسانتر کرد. به عنوان مثال ، کد زیر اندازه گیری معامله AVG را برای مارک Contoso در سال 2018 ارزیابی می کند:
ارزیابی CALCULATETABLE (<[Avg Transaction]>، "تاریخ" [سال] = 2018 ، "محصول" [برند] = "Contoso")
نتیجه یک جدول با یک ردیف و ستون است. برای بازگشت اقدامات بیشتر محاسبه شده در همان زمینه فیلتر ، می توانید نحو سازنده جدول (خطوط 3-5) را تغییر دهید.

عملکرد EvalueateAndLog آرگومان را که به عملکرد منتقل می شود ، باز می گرداند و آن مقدار را در گزارش ارزیابی وارد می کند. برای نمایش گزارش ارزیابی DAX به یک ابزار خارجی نیاز دارید: در زمان نوشتن ، می توانید از SQL Server Profiler یا Dax Debug Output استفاده کنید ، که ابزاری است که در این مقاله استفاده می شود. نسخه آینده استودیوی DAX همچنین ممکن است شامل یک ویژگی خاص برای نمایش گزارش ارزیابی DAX باشد.
ما می توانیم از یک آرگومان اختیاری دوم استفاده کنیم ، که می تواند یک برچسب برای شناسایی عبارت منتقل شده به EvaluateAndlog باشد. گزارش ارزیابی DAX شامل آن برچسب در صورت مشخص شدن است. در مثال زیر ، ما برچسب های شمارشگر و مخرج را برای دو استدلال تقسیم در Delta AVG 3 اندازه گیری کردیم:
در جدول فروش اندازه گیری کنید
Delta AVG 3: = Divide (EvaluateAndlog ([معامله AVG] ، "Numerator") ، EvaluateAndlog (محاسبه ([معامله AVG] ، Allselected ()) ، "مخرج")) - 1
با باز کردن ابزار خارجی DAX Debug Output و اتصال آن به نمونه Power BI Desktop با گزارش خود، شروع به گرفتن همه ارزیابی های زیر می کنیم. در حالت ایده آل، می توانید DAX Debug Output را قبل از رفتن به صفحه نمایش 3 در گزارش نمونه باز کنید. اگر قبلاً به آن صفحه جابجا شده اید، می توانید پرس و جو را تکرار کنید و با کلیک روی پیوند «Refresh visuals» در بخش Performance Analyzer، گزارش ارزیابی DAX را مشاهده کنید. تصویر زیر نتیجه به روزرسانی صفحه Demo 3 را نشان می دهد که از معیار Delta Avg 3 ما استفاده می کند.

گزارش ارزیابی یک خط را برای هر EVALUATELOG اجرا شده در هر سطح از دانه بندی تصویر نمایش می دهد. در واقع، چهار سطح ممکن از دانه بندی در ماتریس وجود دارد:
از آنجایی که هر سطح از جزئیات دارای دو تابع EVALUATEANDLOG در Delta Avg 3 است، در مجموع هشت ردیف با DAXEvaluationLog وجود دارد. با کلیک بر روی هر خط، در قسمت پایینی محتوای بازگردانده شده توسط EVALUATEANDLOG را مشاهده می کنید. برای مثال، جزئیات اولین ردیف DAXEvaluationLog شامل نتیجه Delta Avg 3 است که بر اساس نام تجاری و سال برای برچسب Numerator گروه بندی شده است.

ممکن است از این محتوا تعجب کنید: از این گذشته، EVALUATEANDLOG با ارائه مرجع اندازه گیری Avg Transaction به عنوان آرگومان فراخوانی شد و در نتیجه جدولی را مشاهده می کنید. با این حال، از آنجا که اندازه گیری برای هر ترکیبی از سال و نام تجاری نمایش داده شده در تصویر ارزیابی می شود، تابع EVALUATEANDLOG همه این ارزیابی ها را در یک ورودی گزارش واحد گروه بندی می کند. این انتخاب همچنین با نحوه محاسبه نتایج توسط موتور DAX مطابقت دارد، زیرا ارزیابی معیارها را با همان دانه بندی در یک مرحله واحد به دلایل عملکرد گروه بندی می کند.
اکنون زمان کشف ردیف دوم DAXEvaluationLog است. ما انتظار داریم که نتیجه Delta Avg 3 را با گروه بندی برند و سال برای برچسب مخرج ببینیم. با این حال، آنچه ما می بینیم کمی متفاوت به نظر می رسد زیرا یک مقدار واحد بدون هیچ گروه بندی وجود دارد.

ما این مقدار واحد را می بینیم زیرا محاسبه بیان شده ، تمام ستون های گروه بندی را با استفاده از اصلاح کننده Allselected حذف می کند. به همین دلیل ، نتیجه همیشه برای خطوط 3 ، 5 ، 7 و 9 در خروجی DAX Debug نمایش داده می شود. صرف نظر از گروه بندی مورد انتظار ، ارزیابی همیشه در یک زمینه فیلتر واحد اتفاق می افتد که براساس گروه بندی اعمال شده برای گزارش تغییر نمی کند. از این گذشته ، این دقیقاً همان کاری است که Allselected قرار است انجام دهد: تمام فیلترهای گروه بندی اعمال شده - در این حالت - را با عملکرد Summarizecolumns حذف کنید.
ما می توانیم با اصلاح Allselected فرمول را اصلاح کنیم. ما می خواهیم فیلتر گروه بندی را فقط در ستونهای جدول تاریخ (مانند سال) حذف کنیم و فیلترهای گروهی را که در جداول دیگر اعمال می شود ، در زمینه فیلتر نگه داریم. ما برای دستیابی به این هدف از Allselected (تاریخ) استفاده می کنیم:
در جدول فروش اندازه گیری کنید
Delta Avg 3: = Divide (EvaluateAndlog ([معامله AVG] ، "Numerator") ، EvaluateAndlog (محاسبه ([معامله AVG] ، AllSelected ('Date') ، "مخرج")) - 1مخرج اکنون به جای اینکه یک ارزش واحد برای همه مارک ها باشد ، برای هر مارک محاسبه می شود. این رفتار مورد انتظار زمانی است که اندازه گیری Delta AVG 3 بر اساس سال و برند گروه بندی می شود: ارزش یک سال خاص و برند را با ارزش این برند برای تمام سالهای انتخاب شده تقسیم کنید.

با استفاده از EvaluateAndlog ، می توانیم هر مرحله واسطه ای از یک محاسبه را مشاهده کنیم. با این حال ، نحوه نمایش داده ها نشان دهنده نحوه محاسبه داده ها در بلوک ها بسته به دانه های مختلف موجود در هر بصری در گزارش ها است. در حالی که عملکرد EvaluateAndlog می تواند نتیجه را در یک مرحله میانی یک محاسبه نشان دهد ، تفسیر مقادیر نمایش داده شده نیاز به درک خوبی از چگونگی ترکیب موتور DAX نتیجه یک اندازه گیری برای کل گزارش دارد. محاسبه میانی مقدار محاسبه شده برای یک سلول خاص از گزارش نیست. شما باید با تفسیر نتیجه ارائه شده در زمینه گزارش در حال اجرا ، این ارتباط را برقرار کنید.
ویرایشگر Tabular 3 با یک ویژگی اشکال زدایی یکپارچه DAX همراه است که تجزیه و تحلیل محاسبه داخلی را که در یک بیان DAX اتفاق می افتد ساده می کند. در حالی که EvalueateAndlog یک مرحله میانی از موتور اجرای داخلی را نشان می دهد - که معمولاً با روشی که ما یک سلول واحد را به روشی خطی محاسبه می کنیم مطابقت ندارد - رویکرد Dax Debugger محاسبه مجدد یک عبارت DAX جزئی است تا بتوانیم مرحله را ارزیابی کنیمبه مرحله چگونه موتور در یک گزارش یک سلول واحد را ارزیابی می کند.
از آنجا که DAX Debugger بدون در نظر گرفتن ابزار گزارش که درخواست را ایجاد می کند ، در سطح DAX کار می کند ، ما باید از یک پرس و جو DAX برای اجرای اقدامات شروع کنیم. در حالی که می توانید از شبکه محوری ویرایشگر Tabular 3 به عنوان نقطه شروع برای اشکال زدایی در یک معیار استفاده کنید ، ما می خواهیم ببینیم که چگونه می توانیم DAX Debugger را برای تجزیه و تحلیل گزارش Power BI که در ابتدا استفاده کردیم ، استفاده کنیم. بنابراین ، در ویرایشگر Tabular 3 به مدل Power BI وصل می شویم و سپس یک پنجره پرس و جو جدید DAX ایجاد می کنیم که در آن پرس و جو DAX را که با آنالایزر عملکرد ضبط شده است ، چسباندیم همانطور که قبلاً برای EvaluateAndlog انجام دادیم.

بنابراین در Power BI ، آنالایزر عملکرد را فعال کنید ، به صفحه 1 گزارش نمونه بروید ، بر روی تصاویر تازه کلیک کنید ، پرس و جو DAX را کپی کنید و آن را در پنجره Query Dax بچسبانید. مرحله زیر اجرای پرس و جو است (F5 میانبر برای آن است).

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

سلول انتخاب شده در تصویر قبلی ، مقدار مربوط به ستون کل اندازه Delta AVG 1 برای برند A. Datum است. مقدار در گزار ش-7. 38 ٪ است ، اما بدون نماد درصد در ویرایشگر جدولی نمایش داده می شود. با استفاده از منوی راست کلیک در آن سلول ، می توانیم از طریق مورد منوی Debug Cell Debugger Dax را برای آن سلول فراخوانی کنیم.

پنجره اشکال زدایی اولیه اقدامات درگیر را نشان می دهد (Delta AVG 1 با معامله AVG تماس می گیرد) و مقدار برگشتی توسط Delta AVG 1 در سلول. در پنجره زمینه ارزیابی ، زمینه ارزیابی استفاده شده توسط بیان برجسته را مشاهده می کنیم. در پنجره افراد محلی ، ردیف (بیان فعلی) نتیجه کد برجسته شده در متن ارزیابی فعلی را نشان می دهد. ردیف های زیر نتیجه دو عبارت اجرا شده در کد برجسته را نشان می دهد: بیان تقسیم و اندازه گیری معامله AVG.
پنجره زمینه ارزیابی ، زمینه ارزیابی را از نظر پشته فیلترهای اعمال شده نشان می دهد. این بدان معنی است که وجود یک فیلتر در پشته لزوماً دلالت بر این ندارد که این فیلتر در واقع در زمینه فیلتر فعال است ، زیرا یک دستورالعمل زیر در پشته ممکن است آن را غیرفعال کند. زمینه ارزیابی ، فیلتر داخلی را در بالای لیست نشان می دهد و فیلترهای بیرونی در لیست دنبال می شوند. در واقع ، بیرونی ترین گره (زمینه فیلتر خالی) است. در تصویر بالا ، گره Summarizecolumns شامل هر دو آرگومان فیلتر (مانند __ds0filtertable) و ستون های گروهی (مانند محصول [برند]) است.
میانبر F11 "قدم به" اجرا می کند. مرحله اول کل بیان موجود در اندازه Delta AVG 1 را برجسته می کند.

میانبر F11 دیگر عملکرد اول را در اندازه گیری برجسته می کند ، که کل عملکرد تقسیم است.

ما اطلاعات کافی در پنجره افراد محلی داریم تا بفهمیم چرا نتیجه اندازه Delta AVG 1 100 ٪ نیست. ردیف (بیان فعلی) در افراد محلی نتیجه تقسیم را نشان می دهد. ردیف دوم نتیجه شمارنده تقسیم (معامله AVG) را نشان می دهد. ردیف سوم نتیجه مخرج تقسیم را نشان می دهد ، که تعداد متفاوتی است (841. 09). تعداد موجود در مخرج برای همه مارک ها یکسان است. این در این مرحله قابل مشاهده نیست ، اما می بینیم که این تعداد متفاوتی است و می خواهیم درک کنیم که چگونه محاسبه می شود.
تاکنون محتوای پنجره زمینه ارزیابی تغییر نکرده است. گام دیگر در عمل (F11) محتوای متفاوتی را در زمینه ارزیابی نشان می دهد.

پنجره افراد محلی فقط نتیجه (بیان فعلی) را نشان می دهد ، که ارزیابی معامله AVG است. پنجره زمینه ارزیابی هنوز همان زمینه ارزیابی را نشان می دهد ، که برند محصول A. Datum را فیلتر می کند. از آنجا که ما علاقه ای به تجزیه و تحلیل محاسبه داخلی معامله AVG نداریم ، اکنون از مرحله Over (F10) استفاده می کنیم تا مراحل داخلی این استدلال را کنار بگذاریم و به سمت بیان بعدی حرکت کنیم.

نتیجه (بیان فعلی) در پنجره محلی ها اکنون همان مقداری است که در ردیف دوم پنجره افراد محلی از ابتدای بخش اشکال زدایی ما دیده ایم. با این حال ، زمینه ارزیابی هنوز یکسان است. ما می خواهیم ببینیم که در طول این ارزیابی چه اتفاقی می افتد زیرا ما نمی دانیم که چرا نتیجه معامله AVG متفاوت است. انتظار داشتیم شماره ای را که در شمارنده دیدیم ببینیم ، زیرا هدف این است که مبلغ را به طور متوسط تمام سالها برای برند انتخاب شده تقسیم کنیم. وقت آن است که دوباره از مرحله (F11) استفاده کنیم.

Allselected قبل از معامله AVG ارزیابی می شود. از آنجا که Allselected یک اصلاح کننده فیلتر است ، ردیف (بیان فعلی) در پنجره افراد محلی نشان می دهد (حذف فیلتر) در نتیجه زیرا یک اصلاح کننده فیلتر چیزی را بر نمی گرداند. ما دوباره وارد (F11) می شویم.

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

پس از گسترش ، زمینه فیلتر Alllected را اعمال می کند ، که تمام فیلترهای ارائه شده توسط summarizecolumns را حذف می کند. این دو فیلتر در Summarizecolumns باید در پنجره زمینه ارزیابی قرار گیرند. اما یک اشکال در نسخه ویرایشگر Tabular 3 وجود دارد که ما برای نوشتن این مقاله استفاده کردیم (v3. 4). این اشکال باید در نسخه آینده برطرف شود. با این حال ، از کادر انتخاب فیلتر در Summarizecolumns می توان استفاده کرد تا بفهمد کدام یک از این فیلترها توسط Allsellected نادیده گرفته می شوند. به عنوان مثال ، اگر دو بار Step Out (Shift+F11) را فشار دهیم ، به مرحله ای که عملکرد تقسیم شده برجسته شده است ، برمی گردیم. در این تجسم ، ما شمارنده و مخرج تقسیم در افراد محلی داریم و می توانیم فیلترها را کشف کنیم تا دریابیم که کدام فیلتر توسط Allsellected حذف می شود به طوری که معامله AVG در ردیف دوم و سوم پنجره محلی ها نتیجه یکسان را تولید می کند.

در واقع ، با از بین بردن فیلتر بر روی برند محصول در زمینه ارزیابی ، می بینیم که نتیجه معامله AVG (ردیف دوم در افراد محلی) همان نتیجه محاسبه با Alllellected (ردیف سوم در افراد محلی) است. این بدان معنی است که Allselected فیلتر را از محصول [برند] خارج می کند ، این چیزی نیست که ما می خواستیم. هدف ما این بود که فقط با استفاده از Allselected ("تاریخ") فیلتر را حذف کنیم ، همانطور که در اندازه Delta AVG 2 در مثال با متغیرها انجام دادیم.
با استفاده از Tabular Editor 3 ، می توانیم پنجره Debugger را ببندیم و کد Delta AVG 1 را اصلاح کنیم.

ما کد را ذخیره می کنیم و به پنجره Query Dax باز می گردیم ، جایی که اکنون نتیجه صحیح است.

ما همچنین می توانیم ضمن اجرای بیان مخرج تقسیم ، محتوای تغییر یافته پنجره زمینه ارزیابی را مشاهده کنیم.

فیلتر __DS0FilterTable با فیلتر در تاریخ [سال] تعریف شده در قسمت اولیه پرس و جو DAX برای اجرای انتخاب صفحه فیلتر سالهای 2018 و 2019 مطابقت دارد:
پرس و جو
// dax query define var __ds0filtertable = درمان (، "تاریخ" [سال])
DAX DEBUGGER در ویرایشگر Tabular 3 ابزاری بسیار پیشرفته برای ارزیابی عبارات جزئی در یک گزارش پیچیده در حالی که پیگیری زمینه فیلتر اعمال شده را انجام می دهد. حتی اگر ما از چندین تصویر برای نشان دادن این روند استفاده کردیم ، حرکت به جلو و عقب در مراحل اجرای فوق العاده کارآمد و کارآمد است.
ساختار کد خود را با استفاده از متغیرهایی که به راحتی در آخرین خط یک اندازه گیری جایگزین می شوند ، راهی آسان برای مشاهده سریع نتایج واسطه یک اندازه گیری بدون نیاز به یک ابزار خارجی است. هنگامی که این مسئله شامل چندین سطح اقدامات تو در تو است ، این رویکرد ساده ممکن است تولیدی نباشد ، و ممکن است شما نیاز به ایجاد گزارش های آزمایشی برای بررسی ارزیابی اقدامات درونی داشته باشید.
Dax Studio جایگزینی برای اصلاح مدل ارائه می دهد: می توانید کد را به صورت محلی در اقدامات پرس و جو تغییر داده و اندازه گیری ثابت را به مدل اصلی منتقل کنید و فقط پس از آزمایش کد در نمایش داده شد. در حالی که این تکنیک گزارش ها و مدل های داده را در طول تحقیقات اصلاح نمی کند ، برای کنترل نتیجه ، مهارت لازم برای دستکاری یک پرس و جو DAX را دارد.
خروجی اشکال زدایی DAX یک ابزار خارجی برای نمایش نتیجه EvaluateAndlog است ، که یک تابع DAX است که مرحله میانی یک محاسبه را نشان می دهد. برای استفاده از EvalueAteAndlog باید کد DAX اقدامات خود را اصلاح کنید و به یاد داشته باشید که پس از تحقیقات خود تماس های عملکردی را انجام دهید ، زیرا این کارکردها باعث کاهش سرعت اجرای گزارش می شوند. علاوه بر این ، خروجی تولید شده توسط EvaluateAndlog نیاز به درک عمیق تری از چگونگی محاسبه موتور برای کل گزارش دارد ، و درک منطق اجرای گام به گام را دشوارتر می کند.
Tabular Editor 3 تنها ابزاری است که یک تجربه واقعی DAX Debugger را ارائه می دهد که به شما امکان می دهد کد را به صورت گام به گام اجرا کنید ، در حالی که زمینه ارزیابی را برای هر مرحله اجرا نیز نشان می دهد. در حالی که تکنیک هایی برای نمایش زمینه فیلتر فعال در هر نقطه مشخص وجود دارد ، ویرایشگر Tabular 3 استاندارد طلا از نظر بهره وری است ، زیرا در عرض چند ثانیه اطلاعاتی را فراهم می کند که ممکن است ساعت ها برای جمع آوری گزارش های پیچیده تر نیاز داشته باشد.
در حالی که ویرایشگر Tabular 3 بهترین ابزار در دسترس برای بررسی مسائل محاسبه است ، هر تکنیکی که در این مقاله شرح داده شده است با جوانب مثبت و منفی همراه است. ما روزانه به استفاده از متغیرها و استودیوی DAX ادامه می دهیم. در مقابل ، EvalueateAndlog برای بررسی رفتار داخلی موتور یا نمایش محتوای یک جدول موقت متوسط مورد استفاده در یک اندازه گیری مفید است. اما این تحقیقات را مانند سایر تکنیک ها ، حداقل در موارد متداول ، تسریع نمی کند.
همه چیز اصلاح کننده را محاسبه کنید
تمام ردیف ها را در یک جدول یا تمام مقادیر موجود در یک ستون باز می گرداند ، و از فیلترهایی که ممکن است در داخل پرس و جو استفاده شود ، غافل می شود ، اما فیلترهایی را که از خارج استفاده می شود ، نگه می دارد.
عملکرد تقسیم ایمن با توانایی رسیدگی به تقسیم توسط مورد صفر.
یک جدول خلاصه برای مجموعه های درخواست شده بیش از مجموعه گروه ها ایجاد کنید.
مقدار آرگومان اول را برگردانید و همچنین مقدار را در گزارش ارزیابی DAX وارد کنید.
levaluateandlog ([،] [،]) محاسبه
انتقال متن
یک عبارت را در زمینه اصلاح شده توسط فیلترها ارزیابی می کند.
پلتفرم های تجاری...
برچسب :
نویسنده : مریم کاویانی
بازدید : 28