Power Query-Power BI-try otherwise-مدیریت خطا-کنترل جریان-Query Folding-مثال‌های عملی-تبدیل داده-Error Handling-data transformation-تفکیک خطا

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

ارتباط و مشاوره

برای اطلاعات بیشتر و مشاوره می‌توانید از طریق زیر با ما در ارتباط باشید:

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

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *