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

فصل بیست‌وپنجم — 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 فرق دارد

AppendMerge
ردیف‌ها زیر همستون‌ها بر اساس 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
شکل ۲۵-۲ — مسیر امن برای 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 هر منبع را بنویس.

۲۵.۱۰. مثال چند شعبه

QueryGrain
Sales_TehranOrderLine
Sales_TabrizOrderLine
Sales_ShirazOrderLine

اگر تعریف ستون‌ها و 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فقط فایل معتبر
MetadataBranch/File/Period
TransformSchema + Type + Unit
AppendFactSales unified
QualityMissing/Duplicate files
ReconcileRows + Sales total
LoadFinal Fact

هدف این پروژه ساخت Pipelineای است که ماه بعد با اضافه شدن فایل جدید، بدون دستکاری دستی Query بتواند داده را دریافت و کنترل کند.

جمع‌بندی فصل بیست‌وپنجم

Append برای ساخت Factهای یکپارچه فوق‌العاده است، اما فقط وقتی داده‌های ورودی از نظر Grain، Schema، واحد و معنی کسب‌وکاری هم‌راستا باشند.

Standardize → Tag source → Append → Validate completeness → Reconcile

در فصل بیست‌وششم سراغ کار حرفه‌ای با Folder و Combine Files می‌رویم و Pipeline دریافت خودکار فایل‌های دوره‌ای را قدم‌به‌قدم عمیق‌تر می‌کنیم.