تبدیل HEX به مقادیر RGB در Power Query M
فرض کنید در Power BI کار میکنید و یک پالت رنگ اصلی دارید. حالا برای تکمیل این پالت، میخواهید سایهای کمی روشنتر از همان رنگها را بدست آورید. چطور میتوان این کار را بهصورت برنامهنویسی انجام داد؟
متأسفانه، این کار با استفاده از کدهای HEX بهراحتی انجامپذیر نیست. اما اگر ابتدا کدهای HEX را به مقادیر RGB تبدیل کنید، میتوانید بهراحتی آنها را به سایههای روشنتر تبدیل کرده و سپس دوباره به HEX برگردانید. چه جالب که میتوانید سایههای روشنتر رنگهای اصلیتان را بهصورت برنامهنویسی تولید کنید تا در نمایشهای تصویری (visuals) از آنها استفاده کنید.
در این پست یاد میگیریم که چگونه با استفاده از Power Query M، کدهای HEX را طی چند مرحله ساده به RGB تبدیل کنیم. شما با مفهوم مقادیر RGB آشنا خواهید شد، یاد خواهید گرفت چگونه کدهای HEX را به اجزایشان تفکیک کنید، و ببینید که چگونه کد M آنها را به RGB تبدیل میکند. بیایید قدمبهقدم با هم پیش برویم.
منطق پشت تبدیل مقادیر HEX به RGB
HEX و RGB هر دو یک چیز را توصیف میکنند: رنگ. اما با زبانهای متفاوت. HEX بهصورت فشرده در ابزارهای طراحی استفاده میشود و RGB هنگام کار با اعداد خواناتر است. تبدیل بین این دو تنها به معنای تغییر قالب (format) است.
در مقاله مرتبط مربوط به تبدیل RGB به HEX، مقادیر RGB را در قالب دودویی (binary) بستهبندی کردیم. در اینجا، برعکس آن را انجام میدهیم: از HEX شروع کرده و آن را به مقادیر RGB باز میکنیم.
بیایید یک کد HEX مثل #33A1FF
را بررسی کنیم. این کد به سه جفت تقسیم میشود:
33
برای رنگ قرمز (Red)A1
برای رنگ سبز (Green)FF
برای رنگ آبی (Blue)
هر جفت یک عدد شانزدههشتی (hexadecimal) است. بنابراین:
33
→ 51A1
→ 161FF
→ 255
در نتیجه، مقدار RGB برابر است با: RGB(51, 161, 255)
ساخت این تبدیل در Power Query
مراحل زیر را دنبال میکنیم:
از یک ستون حاوی مقادیر HEX مانند
#FF5733
شروع میکنیم.علامت
#
را حذف میکنیم تا فقط رشته hex باقی بماند.رشته hex را با استفاده از تابع
Binary.FromText()
به باینری تبدیل میکنیم. این تابع یک لیست شامل سه بایت به ما میدهد.هر بایت را به یک عدد تبدیل میکنیم.
اعداد را با کاما بههم میچسبانیم تا یک رشته خوانا مانند
255, 87, 51
بهدست آید.
نکته:
هر رنگ HEX همیشه شامل ۶ کاراکتر است، بنابراین تقسیم آن قابل پیشبینی است.
این روش به شما امکان میدهد مستقیماً مقادیر HEX را به RGB تبدیل کنید، بدون نیاز به رمزگشایی دستی رنگها.
تبدیل مقادیر HEX به مقادیر RGB
خب، چگونه میتوان مقادیر HEX را با استفاده از Power Query M به مقادیر RGB تبدیل کرد؟
بیایید با یک جدول ساده از کدهای HEX شروع کنیم. این جدول در یک مرحله (step) به نام Source
ذخیره شده است.

در هر ردیف یک رنگ HEX مانند #FF5733
وجود دارد. هدف ما این است که این مقدار را به اجزای قرمز (red)، سبز (green) و آبی (blue) تقسیم کنیم، و سپس آنها را بهصورت یک متن با جداکنندهی کاما مانند 255, 87, 51
نمایش دهیم.
ما از توابع باینری (binary functions) در Power Query برای پردازش این تبدیل استفاده خواهیم کرد. در اینجا مرحلهی تبدیل آورده شده است:
[
// 1. Strip the leading “#”
clean = Text.TrimStart([HexCode], "#"),
// 2. Turn the 6-char hex into a list of three byte values
bytes = Binary.ToList(Binary.FromText(clean, BinaryEncoding.Hex)),
// 3. Convert each byte to text
txts = List.Transform(bytes, Text.From),
// 4. Join with commas
result = Text.Combine(txts, ", ")
][result]
این کد چه کاری انجام میدهد:
Text.TrimStart
: نماد#
را از ابتدای مقدار HEX حذف میکند.Binary.FromText
: رشتهی ۶ کاراکتری HEX را به سه بایت (byte) باینری تبدیل میکند.Binary.ToList
: هر بایت را به یک عدد تبدیل میکند.Text.Combine
: اعداد را بهصورت یک رشتهی خوانا با جداکنندهی کاما ترکیب میکند.
نتیجه، یک جدول مرتب است که در آن کد HEX اصلی و مقدار RGB جدید در کنار هم قرار دارند — آماده برای استفاده در مصورسازیها (visuals)، خروجی گرفتن (exports)، یا تعریف قوانین قالببندی (formatting rules) در Power BI.

میتوانید این روش را خودتان امتحان کنید؛ کافیست کد زیر را در Advanced Editor در Power Query کپی و اجرا کنید.
این اسکریپت یک جدول کوچک از مقادیر HEX ایجاد کرده و ستونی به آن اضافه میکند که هر مقدار را به معادل RGB آن تبدیل میکند.
let
// 1) Create the base table
Source = #table(
type table[HexCode = text],
{
{"#FF5733"},
{"#33A1FF"},
{"#A8E063"},
{"#FF33A8"},
{"#6B5B95"},
{"#FFC300"},
{"#008080"},
{"#C70039"},
{"#4B0082"},
{"#2E2E2E"}
}
),
// 2) Add a column that parses each hex triplet into R, G, B
#"Added RGB Column" = Table.AddColumn( Source, "RGB", each
[ // 1. Strip the leading “#”
clean = Text.TrimStart( [HexCode], "#"),
// 2. Turn the 6-char hex into a list of three byte values
bytes = Binary.ToList(Binary.FromText(clean, BinaryEncoding.Hex)),
// 3. Convert each byte to text
txts = List.Transform(bytes, Text.From),
// 4. Join with commas
result = Text.Combine(txts, ", ")
][result],
type text
)
in
#"Added RGB Column"
شما اکنون دیدید که چگونه میتوان کدهای رنگ HEX را با استفاده از چند تبدیل ساده در زبان M به مقادیر RGB تبدیل کرد. شما یاد گرفتید که چگونه کدهای HEX را به سه بخش تقسیم کنید، از توابع باینری استفاده کنید و در نهایت مقدار RGB را برگردانید.
دیدگاهتان را بنویسید