وارد کردن داده در Power Query M: از جدول تا فرمت باینری و بالعکس
آیا تابهحال از قابلیت Enter Data در Power Query استفاده کردهای تا یک جدول کوچک را مستقیماً داخل محیط وارد کنی و سپس در کد M، یک رشتهی طولانی و مرموز شامل دادههای فشرده را مشاهده کردهای؟ آن رشتهی عجیبوغریب در واقع نسخهای فشردهشده (compress) از دادههاست. در این مقاله، یاد میگیری چگونه:
بفهمی Power Query چگونه دادهها را فشرده و در قالب Base64 نگه میدارد.
بالعکس، یعنی چطور یک جدول را به یک رشته باینری (Base64) تبدیل کنیم.
چطور جدول را بدون نیاز به منبع خارجی، داخل خود پرسوجو نگه داریم و استفاده کنیم.
فهرست مطالب
ویژگی Enter Data و متن فشرده (Binary Compressed Text)
وقتی از قابلیت Enter Data استفاده میکنی، Power Query دادهها را به JSON تبدیل، فشردهسازی میکند، سپس آن را با Base64 رمزگذاری کرده و داخل کد نگه میدارد

کد تولید شده براساس جدول بالا
Table.FromRows(
Json.Document(
Binary.Decompress(
Binary.FromText(
"i45WSlTSUTI21DU00jUyMDIBcgwNlGJ1opWSgEwDQ10gAoqbAjlGEPFkENNU18AMpt7UVCk2FgA=",
BinaryEncoding.Base64
),
Compression.Deflate
)
),
let
_t = ((type nullable text) meta [Serialized.Text = true])
in
type table [ID = _t, Date = _t, Amount = _t]
)
آن رشتهی Base64 نمایانگر نسخه فشرده (compressed) جدول داخل کد است
برعکس کردن فرآیند: تبدیل جدول به رشتهی باینری
حالا فرض کن یک جدول داری (از هر منبعی: Excel، SQL و غیره) و میخواهی آن را به رشتهی فشردهشده مشابه تبدیل کنی. این کار مخصوصاً زمانی کاربرد دارد که میخواهی دادهای را داخل کد جاسازی کنی بدون وابستگی به منبع خارجی.
کد زیر این تبدیل را انجام میدهد:
let
tbl = Source, // Any table you want to encode
rows = Table.ToRows(tbl), // Convert to list of rows
json = Json.FromValue(rows), // Serialize to JSON
bin1 = Binary.Compress(json, Compression.Deflate), // Compress JSON text
bin2 = Binary.ToText(bin1, BinaryEncoding.Base64) // Turn into Binary encoded string
in
bin2
جدول را به لیستی از ردیفها تبدیل میکند (
Table.ToRows
).آن را به JSON تبدیل میکند.
JSON را فشرده میکند (
Binary.Compress
).فشردهشده را به رشتهی Base64 تبدیل میکند (
Binary.ToText
)
بازسازی جدول از رشتهی فشردهشده
با استفاده از توابع Binary.FromText
و Binary.Decompress
، میتوان جدول را بازسازی کرد، درست همانطور که Power Query هنگام استفاده از قابلیت Enter Data عمل میکند
کاربردها و محدودیتها
مزایا:
جاسازی دادهی ایستا داخل پرسوجو بدون نیاز به منبع خارجی.
امکان جابهجایی پرسوجو بین فایلها یا محیطها بدون نیاز به تنظیمات اضافه.
اشتراکگذاری پرسوجویی که حاوی داده است بدون وابستگی به منبع
معایب:
دادهی جاسازیشده ایستا است و بهروزرسانی خودکار ندارد.
برای دادههای بزرگ، چنین رویکردی ناکارآمد و دشوار خواهد بود
توابع سفارشی برای تبدیل جدول به کد کامل
برای راحتی، میتوان تابعی ساخت که هم جدول را به Base64 تبدیل کند و هم اسکیما (نوع ستونها) را در کد نهایی ثبت کند:
(tbl as table) as text =>
let
// 1) Encode rows to Base64 (Deflate-compressed JSON)
rowList_lst = Table.ToRows(tbl),
jsonBin_bin = Json.FromValue(rowList_lst),
deflatedBin_bin = Binary.Compress(jsonBin_bin, Compression.Deflate),
base64_txt = Binary.ToText(deflatedBin_bin, BinaryEncoding.Base64),
// 2) Build the table-type text from the input's schema
schema_tbl = Type.TableSchema(Value.Type(tbl)),
nameKind_tbl = Table.SelectColumns(schema_tbl, {"Name", "Kind"}),
typePairs_lst = List.Transform(
Table.ToRows(nameKind_tbl),
each _{0} & " = " & Text.Lower(_{1})
),
typeSpec_txt = "type table [" & Text.Combine(typePairs_lst, ", ") & "]",
// 3) Compose the final code snippet
code_txt =
Text.Format(
"Table.FromRows( Json.Document( Binary.Decompress( Binary.FromText(""#{0}"", BinaryEncoding.Base64), Compression.Deflate ) ), #(lf) #{1} )",
{ base64_txt, typeSpec_txt }
)
in
code_txt
این تابع خروجیای متنی (text) ارائه میدهد که حاوی جدول و اطلاعات نوع ستونهاست و قابل copy‑paste در یک پرسوجوی جدید است
جمعبندی
Power Query از قابلیت Enter Data برای ذخیره خودکار جدول بهصورت JSON فشردهشده و رمزگذاریشده با Base64 استفاده میکند.
میتوان این فرآیند را برعکس نمود و جدول را به رشتهی Binary تبدیل کرد تا داخل پرسوجو جاسازی شود.
این روش برای نمونهسازی، انتشار پرسوجوها بدون نیاز به منابع خارجی، یا جاسازی دادههای ایستا بسیار مفید است.
اما برای دادههای بزرگ یا نیاز به بهروزرسانی، مناسب نیست.
میتوان یک تابع سفارشی نوشت تا این تبدیل را با حفظ نوع ستونها بهسادگی انجام دهد.
دیدگاهتان را بنویسید