در جریان پردازش دادهها با Power Query و زبان M، احتمال مواجهه با خطا در حین محاسبات یا تبدیلها وجود دارد. عبارت try … otherwise ابزاری قدرتمند برای گرفتن و کنترل این خطاهاست تا از قطع شدن کل جریان جلوگیری کند و بتوانیم واکنش مدنظر را در مواجهه با خطا پیاده کنیم.
سینتکس و ساختار Try … otherwise در زبان M
try <Expression> otherwise <FallbackExpression>
<Expression>: بخشی از کد که احتمال خطا در آن وجود دارد.<FallbackExpression>: مقداری که در صورت بروز خطا باید جایگزین مقدار اصلی شود.
ذخیره نتیجه در یک Record
نتیجه اجرای try همیشه یک رکورد (Record) شامل سه فیلد زیر است:
| فیلد | توضیح |
|---|---|
| HasError | منطقى؛ نشان میدهد آیا خطا اتفاق افتاده است (true/false). |
| Error | درصورت خطا، آبجکت خطا (پیام، نوع و سایر جزئیات) را در خود دارد. |
| Value | درصورت عدم خطا، مقدار محاسبهشدهی <Expression> را در خود دارد. |
مثال ساختاری:
let
result = try 1 / 0
in
result
نتیجهی result چنین خواهد بود:
- HasError = true
- Error = [Message=”Division by zero”, …]
- Value = null
مثالهای عملی
مثال ۱: جلوگیری از تقسیم بر صفر
let
Source = Table.FromRecords({ [Dividend=100, Divisor=0], [Dividend=50, Divisor=5] }),
Added = Table.AddColumn(Source, "SafeResult", each
try [Dividend] / [Divisor]
otherwise null
)
in
Added
در این مثال، اگر Divisor صفر باشد، ستون SafeResult مقدار null خواهد گرفت.
مثال ۲: تبدیل رشته به عدد
let
Texts = {"123", "abc", "45.6"},
Converted = List.Transform(Texts, each
try Number.FromText(_)
otherwise 0
)
in
Converted
خروجی: {۱۲۳, ۰, ۴۵.۶}
ترکیب با کنترل جریان
گاهی لازم است بسته به وجود خطا مسیر متفاوتی طی شود:
let
x = try Text.Middle("ABCDE", 10, 2) otherwise null,
result = if x <> null then x else "نامعتبر"
in
result
در اینجا اگر Text.Middle خطا دهد، مقدار "نامعتبر" جایگزین میشود.
نکات کاربردی و بهینهسازی
- استفاده از
tryدر هر گام میتواند مانع Query Folding شود. - برای حفظ عملکرد، تا حد امکان بخشهایی که فقط در صورت خطا اجرا میشوند را کمینه نگه دارید.
- برای بررسی خطاهای پر تعداد، بهتر است ابتدا با یک پرسوجوی نمونه تست کنید و سپس عبارت
tryرا به جریان اصلی اضافه نمایید.
مقایسه با سایر روشهای مدیریت خطا
| روش | مزایا | معایب |
|---|---|---|
| Try … otherwise | ساده، خوانا، یکجا | ممکن است Query Folding را مختل کند |
| Record.FieldOrDefault | مقدار پیشفرض بدون قطع اجرای جریان | تنها روی رکوردها قابل استفاده است |
| Table.ReplaceErrorValues | جایگزین گروهی مقادیر خطا در جدول | تنظیمات محدودتر و گاهی پیچیدهتر |
نتیجه گیری
عبارت try … otherwise یکی از راهکارهای انعطافپذیر و ساده برای مدیریت خطا در زبان M است. با درک ساختار خروجی آن و رعایت نکات عملکردی، میتوانید پردازشهای مقاومی بسازید که در مواجهه با دادههای نامطلوب یا خطاهای ناگهانی از توقف ناخواسته جلوگیری کنند.
منبع پیشنهادی برای مطالعه بیشتر
اگر علاقهمند به یادگیری عمیقتر زبان M و مفاهیم پیشرفتهتر در Power Query هستید، مطالعه کتاب «مرجع زبان فرمولنویسی M در پاور کوئری» تألیف روزبه امیرعصامی را توصیه میکنم. این کتاب با رویکردی آموزشی و ساختار منظم، مفاهیم پایه تا پیشرفتهی زبان M را پوشش میدهد و برای متخصصان هوش تجاری و علاقهمندان به تحلیل داده بسیار مفید است.
اطلاعات بیشتر و تهیه کتاب به انتشارات دیباگران و برای تهیه نسخه الکترونیکی، به صفحه کتاب، در کتابراه مراجعه کنید.
تماس و مشاوره با لاندا
برای اطلاعات بیشتر و مشاوره میتوانید از طریق زیر با ما در ارتباط باشید:

و سپس «افزودن به صفحه اصلی» ضربه بزنید
و سپس «افزودن به صفحه اصلی» ضربه بزنید

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