در جریان پردازش دادهها با 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 را پوشش میدهد و برای متخصصان هوش تجاری و علاقهمندان به تحلیل داده بسیار مفید است.
اطلاعات بیشتر و تهیه کتاب به انتشارات دیباگران و برای تهیه نسخه الکترونیکی، به صفحه کتاب، در کتابراه مراجعه کنید.
ارتباط و مشاوره
برای اطلاعات بیشتر و مشاوره میتوانید از طریق زیر با ما در ارتباط باشید:
نظری داده نشده