فصل 19 از 50 درس 1 از 1

فصل نوزدهم — تغییر Data Type در Power Query؛ ساده به نظر می‌رسد، ولی خیلی مهم است

تغییر Data Type در Power Query؛ ساده به نظر می‌رسد، ولی خیلی مهم است

بخشی از آموزش جامع Power BI

محتوای درس تغییر Data Type در Power Query؛ ساده به نظر می‌رسد، ولی خیلی مهم است

مقدمه؛ چرا نوع داده این‌قدر مهم است؟

فرض کن ستون «مبلغ فروش» از Excel آمده ولی Power Query آن را Text تشخیص داده. ظاهر اعداد درست است، اما وقتی بخواهی Sum بگیری یا مدل را بسازی، تازه دردسر شروع می‌شود. Data Type به Power BI می‌گوید هر ستون واقعاً چه جور داده‌ای است و چه عملیات‌هایی روی آن معنی دارد.

در این فصل با زبان ساده یاد می‌گیریم نوع داده را تشخیص بدهیم، تغییر بدهیم، خطاهای تبدیل را پیدا کنیم و مخصوصاً در تاریخ و اعداد فارسی/محلی گرفتار تنظیمات Locale نشویم.

۱۹.۱. Data Type یعنی چه؟

Data Type یعنی قرارداد ما با سیستم درباره ماهیت یک ستون. «1405» ممکن است کد سال باشد، عدد قابل محاسبه باشد یا حتی بخشی از یک شناسه متنی. انتخاب نوع فقط به شکل ظاهری مقدار بستگی ندارد؛ به معنی کسب‌وکاری آن هم بستگی دارد.

شکل ۱۹-۱ — چند نوع داده رایج در Power Query
شکل ۱۹-۱ — چند نوع داده رایج در Power Query

۱۹.۲. انواع پرکاربرد

نوعنمونهکاربرد
TextIKCO-001کد، نام، شناسه
Whole Number125تعداد
Decimal Number125.75مقدار اعشاری
Fixed Decimal/Currencyمبالغ مالیمحاسبات مالی متناسب
Date2026-08-20تاریخ
Date/Time2026-08-20 08:30زمان رخداد
True/Falsetrueفلگ منطقی

۱۹.۳. تشخیص خودکار همیشه درست نیست

Power Query معمولاً سعی می‌کند نوع ستون را حدس بزند. این قابلیت مفید است، ولی قرار نیست چشم‌بسته قبولش کنیم.

مثلاً کد محصول 00125 اگر Number شود، صفرهای اولش از بین می‌رود. پس ProductCode باید Text بماند.

۱۹.۴. Changed Type چیست؟

وقتی Power Query نوع ستون‌ها را تشخیص یا تغییر می‌دهد، معمولاً یک Step با عنوان Changed Type در Applied Steps می‌بینی.

= Table.TransformColumnTypes(Source,{{"Quantity", Int64.Type},{"SalesAmount", type number}})

۱۹.۵. تغییر نوع از رابط کاربری

ستون را انتخاب کن، روی آیکون نوع داده کنار نام ستون یا Data Type در Ribbon بزن و نوع مناسب را انتخاب کن. بعد Applied Steps را نگاه کن تا دقیقاً بدانی چه تغییری ثبت شده است.

۱۹.۶. مثال واقعی فروش

ستون خامنوع پیشنهادیدلیل
OrderNoTextشناسه است، نه عدد محاسباتی
OrderDateDateتحلیل زمانی
QuantityWhole Numberتعداد
UnitPriceDecimal/Fixed Decimalمبلغ
IsApprovedTrue/Falseوضعیت منطقی

۱۹.۷. عددی که نباید Number باشد

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

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

۱۹.۸. خطای تبدیل

اگر در یک ستون عددی مقدار «نامشخص» وجود داشته باشد و ستون را Number کنیم، آن ردیف Error می‌شود. این خطا دشمن نیست؛ علامت می‌دهد کیفیت داده مسئله دارد.

1250
980
نامشخص  ← conversion error
760

۱۹.۹. قبل از Replace Error علت را بفهم

وسوسه نشو هر Error را سریع با صفر جایگزین کنی. صفر خودش یک مقدار کسب‌وکاری است و ممکن است معنی داده را عوض کند.

اول مشخص کن مقدار نامعتبر چرا وارد ستون شده و سیاست درست پاک‌سازی چیست.

۱۹.۱۰. Locale؛ مشکل پنهان تاریخ و اعشار

فرمت تاریخ و جداکننده اعشار در کشورها متفاوت است. مثلاً 01/02/2026 می‌تواند برای دو سیستم معنی متفاوتی داشته باشد. در تبدیل‌های حساس از Using Locale استفاده کن.

شکل ۱۹-۲ — مسیر امن تبدیل نوع داده
شکل ۱۹-۲ — مسیر امن تبدیل نوع داده

۱۹.۱۱. Change Type Using Locale

وقتی داده با فرهنگ مشخصی تولید شده، نوع مقصد و Locale منبع را با هم تعیین می‌کنیم تا Power Query مقدار را درست تفسیر کند.

این موضوع در فایل‌های CSV و Excel دریافتی از سیستم‌های مختلف خیلی مهم می‌شود.

۱۹.۱۲. Date و Date/Time

اگر فقط روز برای تحلیل مهم است، Date معمولاً تمیزتر است. اگر ساعت سفارش یا رخداد اهمیت دارد، Date/Time لازم می‌شود.

نوع را بر اساس سؤال تحلیلی انتخاب کن، نه صرفاً بیشترین جزئیات ممکن.

۱۹.۱۳. Decimal و Fixed Decimal

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

همیشه تعریف سیستم منبع و قواعد مالی پروژه را مبنا قرار بده.

۱۹.۱۴. تبدیل Text به Number

Table.TransformColumnTypes(
    Source,
    {{"SalesAmount", type number}}
)

اگر ستون شامل فاصله، علامت پول یا متن اضافه باشد، ممکن است قبل از تبدیل به پاک‌سازی نیاز داشته باشد.

۱۹.۱۵. Trim و Clean قبل از تبدیل

گاهی مقدار « 1250 » به خاطر فاصله‌های اضافه یا کاراکترهای نامرئی دردسر می‌سازد. قبل از تبدیل، Text.Trim و در صورت نیاز Clean می‌تواند کمک کند.

Text.Trim([AmountText])

۱۹.۱۶. تبدیل تاریخ متنی

اگر تاریخ به شکل Text آمده، ابتدا مشخص کن فرمت واقعی چیست. بعد با Locale مناسب آن را تبدیل کن. حدس زدن تاریخ یکی از خطرناک‌ترین کارهای ETL است.

۱۹.۱۷. Null با Zero فرق دارد

مقدارمعنی احتمالی
nullمقدار موجود/ثبت نشده
0مقدار ثبت شده و برابر صفر
""رشته خالی

این سه را بی‌دلیل به هم تبدیل نکن.

۱۹.۱۸. Boolean

ستون‌هایی مثل IsActive، IsApproved یا HasWarranty برای True/False مناسب‌اند؛ البته اگر سیستم منبع واقعاً دو حالت داشته باشد.

اگر وضعیت سه‌حالته مثل Pending هم داریم، Boolean انتخاب درستی نیست.

۱۹.۱۹. نوع داده و مدل

نوع صحیح در Power Query روی فشرده‌سازی، Relationship، DAX و رفتار Visualها اثر می‌گذارد. اصلاح نوع داده را تا آخر پروژه عقب نینداز.

۱۹.۲۰. نوع داده و Relationship

کلیدهایی که به هم Relationship می‌شوند باید از نظر نوع داده سازگار باشند. ProductKey عددی در Fact و ProductKey متنی در Dimension علامت طراحی ناسازگار است.

۱۹.۲۱. نوع داده و DAX

اگر SalesAmount به صورت Text بارگذاری شود، Measureهای عددی طبیعی روی آن قابل استفاده نیستند. بهتر است مسئله نوع داده را در مرحله مناسب حل کنیم، نه با DAXهای عجیب.

۱۹.۲۲. Profiling

Column Quality، Column Distribution و Column Profile می‌توانند در شناخت Null، Error و توزیع داده کمک کنند.

قبل از تغییر گسترده نوع، ستون‌های حساس را Profile کن.

۱۹.۲۳. نمونه شرکت هانا

فایل فروش شعبه از Excel آمده و ستون Amount در بعضی ردیف‌ها عدد، در بعضی ردیف‌ها «-» و در چند ردیف خالی است. اول باید سیاست داده مشخص شود: خط تیره یعنی صفر، ناموجود یا خطای ورود؟

تا معنی روشن نشده، تبدیل کورکورانه به Number کار حرفه‌ای نیست.

۱۹.۲۴. الگوی پیشنهادی پاک‌سازی

Inspect
→ Define business meaning
→ Clean text
→ Handle invalid values
→ Convert type
→ Validate errors
→ Load

۱۹.۲۵. ترتیب Stepها

اگر خیلی زود نوع داده را تبدیل کنی و بعد بخواهی متن را پاک‌سازی کنی، ممکن است Stepها پیچیده شوند. ترتیب Transformationها را آگاهانه انتخاب کن.

۱۹.۲۶. Schema Drift

ممکن است امروز ستون Quantity عددی باشد ولی ماه بعد سیستم منبع یک مقدار متنی جدید وارد کند. Refresh ممکن است Fail شود یا Error تولید شود.

برای منابع ناپایدار، کنترل کیفیت و قرارداد داده اهمیت بیشتری دارد.

۱۹.۲۷. تست بعد از تبدیل

کنترلسؤال
Error Countچند ردیف خطا داریم؟
Null CountNullها منطقی‌اند؟
Min/Maxمقادیر عجیب داریم؟
Sampleچند ردیف با منبع تطبیق دارد؟
Relationshipکلیدها سازگارند؟

۱۹.۲۸. اشتباه رایج؛ تبدیل شناسه به عدد

کد 000124 اگر Number شود به 124 تبدیل می‌شود. اگر صفرهای ابتدایی بخشی از شناسه باشند، اطلاعات از دست رفته است.

۱۹.۲۹. اشتباه رایج؛ Replace Error با صفر

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

۱۹.۳۰. اشتباه رایج؛ تاریخ بدون Locale

تاریخی که روی سیستم تو درست دیده می‌شود ممکن است در محیط دیگری اشتباه تفسیر شود. برای فرمت‌های مبهم Locale را صریح کن.

۱۹.۳۱. Best Practiceها

نوع داده را بر اساس معنی کسب‌وکاری انتخاب کن.

شناسه‌ها را معمولاً Text نگه دار مگر دلیل مشخصی برای عددی بودن وجود داشته باشد.

بعد از تبدیل، Errorها را بررسی کن.

Null را بی‌دلیل Zero نکن.

برای تاریخ و اعداد محلی Locale را جدی بگیر.

نوع کلیدهای Relationship را هماهنگ نگه دار.

Stepهای Changed Type را در Queryهای مهم بازبینی کن.

۱۹.۳۲. تمرین پایه

یک جدول با ستون‌های CustomerCode، OrderDate، Quantity، Amount و IsActive بساز و نوع مناسب هر ستون را تعیین کن. برای هر انتخاب یک دلیل بنویس.

۱۹.۳۳. تمرین متوسط

ستون AmountText با مقادیر 1200، 950، خط تیره، Null و 1,250 را پاک‌سازی کن و فقط بعد از تعیین سیاست کسب‌وکار به عدد تبدیل کن.

۱۹.۳۴. تمرین تاریخ

دو فایل با فرمت‌های تاریخی متفاوت فرض کن. توضیح بده چطور با Using Locale جلوی تفسیر اشتباه را می‌گیری.

۱۹.۳۵. پروژه فصل؛ Data Type Audit شرکت هانا

مرحلهخروجی
Inventoryفهرست ستون‌ها و نوع فعلی
Business Meaningمعنی واقعی ستون
Riskشناسه/تاریخ/مبلغ حساس
Conversionنوع مقصد
QualityError/Null checks
Validationتطبیق با منبع

در پایان یک Data Type Dictionary کوچک برای مدل فروش شرکت هانا تحویل بده.

جمع‌بندی فصل نوزدهم

Data Type شاید یکی از ساده‌ترین منوهای Power Query باشد، ولی اشتباه در آن می‌تواند از صفرهای گمشده کد محصول تا تاریخ اشتباه و Measure خراب ایجاد کند.

Meaning first → Type second → Validate always

در فصل بیستم سراغ Split Column و Merge Columns می‌رویم و یاد می‌گیریم چطور ستون‌های شلوغ را به داده قابل تحلیل تبدیل کنیم.