دیتافلو-دیتا فلو-Power BI Dataflow-ETL در Power BI-Incremental Refresh-Enhanced Compute Engine-Azure Data Lake Gen2-Mapping Dataflow-M Query-فلو داده در پاور بی‌آی-جریان داده در Power BI-معماری لایه‌ای فلو داده-فرآیند ETL در پاور بی‌آی-به‌روزرسانی تدریجی (Incremental Refresh)-موتور محاسبات پیشرفته (Enhanced Compute Engine)-دریاچه داده آزور نسل ۲ (Azure Data Lake Gen2)-نگاشت داده (Mapping Dataflow)-زبان M در Power Query-توابع سفارشی M-فرمول‌نویسی DAX-طراحی داشبورد در Power BI

در دنیای هوش تجاری، مدیریت داده و اتوماسیون فرآیندهای ETL اهمیت حیاتی دارد. Dataflow در Power BI ابزاری قدرتمند برای ایجاد یک معماری داده متمرکز است که امکان تعریف، نگهداری و به‌روزرسانی منطق استخراج و تبدیل داده (ETL) را فراهم می‌کند.

Dataflow در Power BI چیست؟

دیتافلو مجموعه‌ای از موجودیت‌ها (Entities) است که در Power BI Service تعریف می‌شوند و مراحل M Query برای استخراج، پاک‌سازی و انتقال داده را ذخیره می‌کنند. خروجی هر Entity به‌صورت جدولی یا مدل Common Data Model (CDM) قابل دسترسی است و می‌توان آن را از طریق گزارش‌ها و ابزارهای تحلیلی مصرف کرد.

مزایا و کاربردهای Dataflow

  • مدیریت متمرکز منطق ETL، تفکیک وظایف توسعه و نگهداری
  • اشتراک‌گذاری هوشمند داده‌ها بین گزارش‌ها و پروژه‌های مختلف
  • کاهش هزینه پردازش با بهره‌گیری از Query Folding و Incremental Refresh
  • تسهیل یکپارچه‌سازی با سایر سرویس‌های Azure مانند Synapse و Databricks
مزیتتوضیحات
مقیاس‌پذیریاجرای موازی مراحل و توزیع بار با Enhanced Compute Engine
یکپارچگی دادهخروجی CDM روی Azure Data Lake Gen2
امنیت و کنترلتعریف Row-Level Security و مدیریت دسترسی در Workspace
اتوماسیونراه‌اندازی خودکار با REST API و PowerShell

معماری لایه‌ای Dataflow

لایه ۱: Staging

در این لایه داده‌های خام از منابع مختلف استخراج و فیلتر می‌شوند. حذف ستون‌های غیرضروری در این مرحله، حجم پردازش را کاهش می‌دهد.

let
    Source = Sql.Database(SourceServer, SourceDB),
    SalesRaw = Source{[Schema="dbo",Item="Sales"]}[Data],
    Filtered = Table.SelectRows(
        SalesRaw,
        each [SaleDate] >= DateFrom and [SaleDate] <= DateTo
    )
in
    Filtered

لایه ۲: Transformation

با تعریف توابع سفارشی M می‌توانید عملیات پیچیده‌ای مانند پارس‌کردن JSON یا محاسبات تجمیعی را انجام دهید. جداسازی هر گام در Entityهای مجزا، قابلیت تست و نگهداری را بهبود می‌بخشد.

تابع سفارشی برای پارس‌کردن JSON

(fn_ParseJson as text) as record =>
let
    Parsed = Json.Document(fn_ParseJson),
    Flatten = Record.ToTable(Parsed)
in
    Record.FromTable(Flatten)

مثال Entity تبدیل (Trf_Sales)

let
    Source = Stg_Sales,
    ParsedDetails = Table.AddColumn(
        Source,
        "DetailsRecord",
        each fn_ParseJson([SalesDetails])
    ),
    Expanded = Table.ExpandRecordColumn(
        ParsedDetails,
        "DetailsRecord",
        {"ProductID","Quantity","UnitPrice"}
    ),
    Renamed = Table.RenameColumns(
        Expanded,
        {{"UnitPrice", "PricePerUnit"}}
    )
in
    Renamed

لایه ۳: Semantic (Presentation)

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

let
    Source = Trf_Sales,
    Grouped = Table.Group(
        Source,
        {"ProductID"},
        {
            {"TotalQuantity", each List.Sum([Quantity]), type number},
            {"TotalRevenue", each List.Sum(List.Transform([Quantity],[Quantity] * [PricePerUnit])), type number}
        }
    ),
    MergedProduct = Table.NestedJoin(
        Grouped,
        "ProductID",
        Products,
        "ID",
        "ProductInfo",
        JoinKind.LeftOuter
    ),
    Final = Table.ExpandRecordColumn(
        MergedProduct,
        "ProductInfo",
        {"Name","Category"}
    )
in
    Final

تعریف پارامترهای پویا و Incremental Refresh

استفاده از پارامترها، Dataflow را پویا و آماده به‌روزرسانی فشرده می‌کند.

let
    DateFrom     = #date(2023, 1, 1),
    DateTo       = #date(2023, 12, 31),
    SourceServer = "my-sql-server.database.windows.net",
    SourceDB     = "SalesDB"
in
    [
      DateFrom     = DateFrom,
      DateTo       = DateTo,
      SourceServer = SourceServer,
      SourceDB     = SourceDB
    ]

برای فعال‌سازی Incremental Refresh:

  1. به تنظیمات Entity (مثلاً Trf_Sales) بروید.
  2. پارامترهای DateFrom و DateTo را به فیلد تاریخ متصل کنید.
  3. دوره نگهداری و بارگذاری جدید را تنظیم و ذخیره کنید.

امکانات پیشرفته Dataflow

  • Enhanced Compute Engine: اجرای موازی مراحل و افزایش سرعت Refresh
  • Mapping Dataflow: نگاشت خودکار منطق CDM بدون نیاز به نوشتن M
  • ذخیره‌سازی CDM در Azure Data Lake Gen2 برای Lakehouse Pattern
  • REST API و PowerShell برای اتوماسیون CI/CD و مدیریت نسخه
Invoke-RestMethod -Method Post `
  -Uri "https://api.powerbi.com/v1.0/myorg/groups/{groupId}/dataflows/{dataflowId}/refreshes" `
  -Headers @{ Authorization = "Bearer $token" }

بهترین روش‌ها برای طراحی و پیاده‌سازی

  1. تعریف Naming Convention استاندارد (df_, stg_, trf_)
  2. استفاده از پارامترها و توابع سفارشی برای کوئری‌های پویا
  3. پایش و لاگ‌گیری با Query Diagnostics و Performance Analyzer
  4. بهره‌گیری از Incremental Refresh و پارامترهای تاریخ
  5. پیاده‌سازی Security ردیفی و Versioning در Git یا Azure DevOps

نتیجه‌گیری

Dataflow در Power BI، بستر مناسبی برای مدیریت یکپارچه ETL در سطح سازمان است. با استفاده از معماری لایه‌ای، مثال‌های عملی M Query و امکانات پیشرفته، می‌توانید عملکرد پروژه‌های Power BI را بهینه کرده و از مقیاس‌پذیری و امنیت بالاتری بهره‌مند شوید.

منابع پیشنهادی برای مطالعه عمیق‌تر

برای گسترش دانش خود در زمینه زبان M، DAX و طراحی داشبوردهای حرفه‌ای در Power BI، پیشنهاد می‌شود کتابهای زیر را مطالعه کنید:

برای پیاده‌سازی سناریوی عملی و مشاوره بیشتر، هم‌اکنون با تیم لاندا در تماس باشید!

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

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

  • تماس  با شرکت لاندا برای مشاوره، اجرا و یا آموزش تخصصی.

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

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

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