فصل بیستوپنجم — Append Queries در Power Query؛ ترکیب فایلهای ماهانه، شعب و سالها
Append Queries در Power Query؛ ترکیب فایلهای ماهانه، شعب و سالها
بخشی از آموزش جامع Power BI
محتوای درس Append Queries در Power Query؛ ترکیب فایلهای ماهانه، شعب و سالها
مقدمه؛ وقتی دادهها زیر هم قرار میگیرند
فرض کن هر ماه یک فایل فروش میگیری: Sales_01.xlsx، Sales_02.xlsx و Sales_03.xlsx. ساختار همه تقریباً یکی است و میخواهی یک FactSales یکپارچه داشته باشی. اینجا Append ابزار اصلی ماست.
Merge ستونها را از دو منبع کنار هم میآورد، ولی Append ردیفهای چند Query را زیر هم میچیند.
۲۵.۱. Append چیست؟
January rows
+ February rows
+ March rows
= Unified Sales rows
۲۵.۲. Append با Merge فرق دارد
| Append | Merge |
|---|---|
| ردیفها زیر هم | ستونها بر اساس Key کنار هم |
| برای ماهها/شعب مشابه | برای Lookup/Join |
| Schema مشابه مهم است | Join Key مهم است |
۲۵.۳. Append Two Tables
برای دو Query میتوان Append Queries را انتخاب کرد و جدول دوم را به اول اضافه کرد. اگر نمیخواهی Query اصلی تغییر کند، Append Queries as New انتخاب خوبی است.
۲۵.۴. Three or More Tables
وقتی چند ماه یا چند شعبه داری، حالت Three or more tables اجازه میدهد چند Query را در یک خروجی ترکیب کنی.
۲۵.۵. Schema باید یکسان باشد؟
لازم نیست همه ستونها صددرصد یکسان باشند، اما اگر نام ستونها متفاوت باشد Power Query آنها را ستونهای جدا در نظر میگیرد و برای ردیفهای فاقد آن ستون Null میگذارد.
File A: Product, Amount
File B: Product, SalesAmount
→ three columns, not one unified amount
۲۵.۶. استانداردسازی قبل از Append
قبل از Append نام ستون، Data Type، معنی ستون و Grain را استاندارد کن.
۲۵.۷. مثال نام ستون متفاوت
Jan: SalesAmount
Feb: Amount
Rename Feb[Amount] → SalesAmount
Then Append
۲۵.۸. Data Type ناسازگار
اگر Amount در یک فایل Number و در فایل دیگر Text باشد، بعد از Append ممکن است تبدیل نوع و Error داشته باشی. بهتر است Queryهای Staging قواعد نوع داده مشترک داشته باشند.
۲۵.۹. Grain یکسان
فقط چون دو جدول ستونهای مشابه دارند، دلیل نمیشود قابل Append باشند. اگر یکی در Grain Order و دیگری OrderLine است، ترکیب مستقیم معنی Fact را خراب میکند.
نکته: قبل از Append جمله Grain هر منبع را بنویس.
۲۵.۱۰. مثال چند شعبه
| Query | Grain |
|---|---|
| Sales_Tehran | OrderLine |
| Sales_Tabriz | OrderLine |
| Sales_Shiraz | OrderLine |
اگر تعریف ستونها و Grain یکی باشد، میتوان آنها را به FactSales_AllBranches تبدیل کرد.
۲۵.۱۱. ستون Source
قبل از Append بهتر است منبع هر Row را قابل ردیابی کنی؛ مثلاً BranchCode، SourceFile یا Period.
SourceFile = "Sales_1405_05.xlsx"
۲۵.۱۲. چرا SourceFile مهم است؟
اگر بعداً مجموع فروش عجیب شد، میتوانی سریع بفهمی کدام فایل یا شعبه داده غیرعادی وارد کرده است.
۲۵.۱۳. Append فایلهای ماهانه
الگوی دستی برای چند فایل کم جواب میدهد، اما اگر هر ماه فایل جدید میآید بهتر است از الگوی Folder/Combine Files استفاده کنیم تا Query با فایلهای جدید هم رشد کند.
۲۵.۱۴. Folder Connector
در سناریوی پوشه، Power Query فایلهای موجود را فهرست میکند و میتوان Transformation مشترکی روی همه اعمال کرد.
ساختار فایلها باید تا حد ممکن پایدار و قراردادشده باشد.
۲۵.۱۵. Combine Files
Power Query معمولاً یک Sample File و Function برای Transform کردن فایلهای مشابه ایجاد میکند. این الگو برای ورودیهای دورهای بسیار کاربردی است.
۲۵.۱۶. فایل نمونه
Transformation را روی Sample File طراحی میکنی و همان منطق روی فایلهای دیگر اعمال میشود. اگر فایل جدید Schema متفاوتی داشته باشد، ممکن است Refresh خراب شود.
۲۵.۱۷. فیلتر فایلهای ناخواسته
پوشه ممکن است فایل Backup، فایل موقت یا فایل سال قبل داشته باشد. قبل از Combine بر اساس Extension، Name یا Folder Path فایلهای معتبر را محدود کن.
۲۵.۱۸. فایل مخفی و Temporary
فایلهای موقت Excel مثل ~$File.xlsx نباید وارد Fact شوند. Query ورودی باید چنین فایلهایی را حذف کند.
۲۵.۱۹. Schema Drift
اگر ماه بعد ستون جدیدی اضافه یا نام ستون عوض شود، Pipeline باید یا آن را مدیریت کند یا با خطای قابل تشخیص متوقف شود.
نادیده گرفتن تغییر Schema ممکن است خطرناکتر از Fail شدن Refresh باشد.
۲۵.۲۰. Missing Column
اگر ستون اختیاری است، میتوان برای نبودنش Rule مشخص داشت. اگر ستون حیاتی مثل SalesAmount است، بهتر است نبودن آن به عنوان Data Contract violation دیده شود.
۲۵.۲۱. Append چند سال
Sales_1403
Sales_1404
Sales_1405
→ FactSales_History
قبل از ترکیب بررسی کن تعریف KPI، واحد پول، کدها و ساختار کسبوکار در سالها تغییر نکرده باشد.
۲۵.۲۲. تغییر کد محصول بین سالها
اگر ProductCode در سیستم قدیمی با سیستم جدید فرق دارد، Append خام کافی نیست. ابتدا Mapping یا Harmonization لازم است.
۲۵.۲۳. واحد پول
اگر یک منبع ریال و دیگری تومان است، ستون Amount ظاهراً همنام ولی از نظر معنی یکسان نیست. قبل از Append واحد را استاندارد کن.
۲۵.۲۴. تاریخ و Calendar
فرمت تاریخ منابع مختلف ممکن است متفاوت باشد. قبل از Append به Date/DateKey استاندارد تبدیل کن تا تحلیل زمانی یکپارچه شود.
۲۵.۲۵. Reconciliation
| کنترل | مثال |
|---|---|
| Row Count | جمع ردیف فایلها = خروجی |
| Sales Total | جمع مبلغ منابع = Fact |
| File Count | همه فایلهای مورد انتظار خوانده شدند |
| Period Coverage | ماه گمشده نداریم |
| Errors | تبدیل نوع بدون خطای ناشناخته |
۲۵.۲۶. کنترل تعداد فایل
اگر انتظار ۱۲ فایل ماهانه داری ولی Folder فقط ۱۱ فایل معتبر دارد، Refresh موفق ممکن است گزارش ناقص تولید کند. کنترل Completeness مهم است.
۲۵.۲۷. Duplicate File
اگر یک فایل با نام Copy یا Backup در پوشه بماند، Append میتواند فروش را دوباره وارد کند. SourceFile و کنترل Unique File List کمک میکند.
۲۵.۲۸. مثال شرکت هانا
هر شعبه روزانه یک CSV فروش میفرستد. فایلها در پوشه سال/ماه قرار میگیرند. Pipeline باید فقط CSVهای معتبر را بخواند، BranchCode را از نام فایل یا Metadata اضافه کند، Schema را استاندارد کند و همه را Append کند.
۲۵.۲۹. نام فایل به عنوان Metadata
THR_1405-05-29_Sales.csv
→ Branch = THR
→ Date = 1405-05-29
استخراج Metadata از نام فایل فقط وقتی خوب است که Naming Convention رسمی و پایدار باشد.
۲۵.۳۰. Staging Pattern
Raw Files
→ Transform Sample
→ Standardized Staging
→ Append
→ Quality Checks
→ FactSales
این ساختار Debug و نگهداری را سادهتر میکند.
۲۵.۳۱. Enable Load
Queryهای میانی و Staging همیشه لازم نیست وارد Model شوند. اگر فقط برای ساخت Query نهایی هستند، میتوان Load آنها را متناسب با معماری غیرفعال کرد.
۲۵.۳۲. Performance
خواندن صدها فایل کوچک میتواند هزینه داشته باشد. آرشیو فایلهای غیرضروری، فیلتر زودهنگام و طراحی Source بهتر میتواند کمک کند.
بهینهسازی را با حجم واقعی و Refresh واقعی بسنج.
۲۵.۳۳. Query Folding
برای فایلها معمولاً مفهوم Folding مثل SQL محدودتر است؛ پس Transformationها بیشتر در Power Query Engine انجام میشوند. این موضوع در حجم بالا اهمیت دارد.
۲۵.۳۴. Append و Dimension
اگر چند سیستم Customer Master جدا دارند، Append کردن Dimensionها بدون حل Duplicate و Business Key ممکن است Dimension ناسالم بسازد.
برای Dimension یکپارچه، Master Data و Deduplication را جدی بگیر.
۲۵.۳۵. Append Factها
Append Factها زمانی مناسب است که Process، Grain و Metric Definition هممعنی باشند. فروش آنلاین و فروش حضوری را میتوان فقط بعد از بررسی این قراردادها یکپارچه کرد.
۲۵.۳۶. خطای رایج؛ ستون همنام با معنی متفاوت
Amount در فایل A ممکن است Gross Amount و در فایل B Net Amount باشد. اسم یکسان تضمین معنی یکسان نیست.
۲۵.۳۷. خطای رایج؛ Folder بدون فیلتر
هر چیزی که داخل پوشه افتاد نباید وارد Fact شود. Extension، Naming Convention و مسیر را کنترل کن.
۲۵.۳۸. خطای رایج؛ فایل Duplicate
وجود نسخه Copy یک فایل میتواند Total را دو برابر کند، بدون اینکه Query Error بدهد.
۲۵.۳۹. خطای رایج؛ عدم کنترل ماه گمشده
Append موفق به معنی کامل بودن داده نیست. Completeness Check باید جدا داشته باشی.
۲۵.۴۰. Best Practiceها
قبل از Append Schema و Grain را استاندارد کن.
SourceFile/SourceSystem را نگه دار.
واحدها و Data Typeها را یکسان کن.
برای ورودی دورهای Folder Pattern بساز.
فایلهای Temporary/Backup را فیلتر کن.
Row Count و Total را Reconcile کن.
ماه یا فایل گمشده را کنترل کن.
Schema Drift را بخشی از Data Quality بدان.
۲۵.۴۱. تمرین پایه
سه Query فروش Jan، Feb و Mar با Schema یکسان بساز، SourceMonth اضافه کن و آنها را Append کن. تعداد ردیف و Total را قبل و بعد مقایسه کن.
۲۵.۴۲. تمرین متوسط
در فایل دوم ستون Amount به نام SalesAmount و در فایل سوم Text است. قبل از Append هر سه را استاندارد کن و دلیل ترتیب Stepها را بنویس.
۲۵.۴۳. تمرین Folder
یک پوشه فرضی با ۱۲ فایل ماهانه، یک فایل Backup و یک فایل Temporary طراحی کن. Ruleهای انتخاب فایل معتبر را مشخص کن.
۲۵.۴۴. تمرین چالشی
دو سیستم فروش داری؛ یکی مبلغ را ریال و دیگری تومان ذخیره میکند. علاوه بر تبدیل واحد، چه Metadata و کنترلهایی لازم است تا Append قابل Audit باشد؟
۲۵.۴۵. پروژه فصل؛ Unified Sales Pipeline شرکت هانا
| مرحله | خروجی |
|---|---|
| Input | فایلهای شعب |
| Filter | فقط فایل معتبر |
| Metadata | Branch/File/Period |
| Transform | Schema + Type + Unit |
| Append | FactSales unified |
| Quality | Missing/Duplicate files |
| Reconcile | Rows + Sales total |
| Load | Final Fact |
هدف این پروژه ساخت Pipelineای است که ماه بعد با اضافه شدن فایل جدید، بدون دستکاری دستی Query بتواند داده را دریافت و کنترل کند.
جمعبندی فصل بیستوپنجم
Append برای ساخت Factهای یکپارچه فوقالعاده است، اما فقط وقتی دادههای ورودی از نظر Grain، Schema، واحد و معنی کسبوکاری همراستا باشند.
Standardize → Tag source → Append → Validate completeness → Reconcile
در فصل بیستوششم سراغ کار حرفهای با Folder و Combine Files میرویم و Pipeline دریافت خودکار فایلهای دورهای را قدمبهقدم عمیقتر میکنیم.