استخراج Year، Month یا Day از یک Date در Power Query
ستون تاریخ (Date column) پایه و اساس کار با جدولهای تقویمی (Calendar tables) در پاور کوئری (Power Query) است. این ستون شامل تمامی اطلاعات مرتبط با سال (Year)، ماه (Month) و روز (Day) میباشد. با این حال، معمولاً داشتن اجزای تاریخ به صورت جداگانه در مدل داده (Data model) بسیار کاربردی است. این کار باعث میشود که بتوانید به راحتی روی آنها در جداول داده (Data tables) فیلتر (Filter) اعمال کنید یا در فرمولهای DAX خود به آنها ارجاع دهید. در این مقاله، شما یاد میگیرید چگونه مقادیر سال، ماه یا روز را از یک تاریخ استخراج (Extract) کنید.
استخراج سال از مقدار تاریخ
در پاور کوئری (Power Query)، میتوانید از مجموعهای از توابع برای استخراج مقدار سال از یک تاریخ استفاده کنید. بیایید به مهمترین آنها نگاهی بیندازیم.
استفاده از تابع Date.Year
برای استخراج سال از یک تاریخ، میتوانید از تابع Date.Year استفاده کنید. این تابع یک مقدار تاریخ را دریافت کرده و سال مربوطه را به صورت عدد برمیگرداند. در اینجا یک مثال آورده شده است:
let
myDate= #date( 2024, 6, 29 ),
extractYear = Date.Year( myDate ) // Output: 2024
in
extractYear
در این مثال، ما یک مقدار تاریخ به نام myDate ایجاد میکنیم که نمایانگر ۲۹ ژوئن ۲۰۲۴ است. تابع Date.Year سال را از این تاریخ استخراج میکند که مقدار آن ۲۰۲۴ است.
استفاده از تابع Date.ToText
اگر ترجیح میدهید سال را به صورت مقدار متنی (Text value) داشته باشید، میتوانید از تابع Date.ToText همراه با یک رشته قالببندی سفارشی (Custom formatting string) استفاده کنید. این روش بهویژه زمانی مفید است که نیاز داشته باشید سال را در قالب متنی خاصی، مثلاً برای نمایش (Display) استفاده کنید. در اینجا نحوه انجام آن آمده است:
let
myDate= #date( 2024, 6, 29 ),
extractYear = Date.ToText( myDate, "yyyy" ), // Output: "2024"
extractshortYear = Date.ToText( myDate, "yy" ) // Output: "24"
in
extractshortYear
در مرحله extractYear، تابع Date.ToText تاریخ را به متن تبدیل میکند و آن را با فرمت «yyyy» قالببندی میکند که نشاندهنده سال است. خروجی این مرحله «2024» است، اما به صورت رشته متنی (Text string). مرحله بعدی با نام extractShortYear، دو کاراکتر آخر سال را استخراج کرده و «24» را برمیگرداند. این عملیات زمانی مفید است که بخواهید سال را به صورت متن داشته باشید، مثلاً برای الحاق (Concatenation) با مقادیر متنی دیگر.
چه زمانی از هر تابع استفاده کنیم؟
استفاده از Date.Year: زمانی که نیاز به سال به صورت عدد (Number) دارید، مثلاً برای انجام محاسبات بیشتر یا به عنوان ستونی جداگانه در مدل داده.
استفاده از Date.ToText: زمانی که نیاز به سال به صورت متن (Text) دارید، مخصوصاً وقتی میخواهید آن را با مقادیر متنی دیگر ترکیب کنید یا قالب سفارشی مدنظر است.
استخراج ماه از مقدار تاریخ
استخراج ماه از تاریخ در پاور کوئری نیز میتواند با استفاده از چند تابع انجام شود، بسته به اینکه بخواهید ماه را به صورت عدد یا نام ماه داشته باشید. بیایید چند مثال را بررسی کنیم.
استفاده از تابع Date.Month
سادهترین راه برای استخراج ماه از یک تاریخ استفاده از تابع Date.Month است. این تابع ماه را به صورت عدد بازمیگرداند. در اینجا یک مثال آورده شده است:
let
myDate= #date( 2024, 6, 29 ),
extractMonth = Date.Month( myDate ) // Output: 6
in
extractMonth
در اینجا، تابع Date.Month ماه را از تاریخ استخراج میکند که مقدار آن ۶ است.
استفاده از تابع Date.MonthName
اگر به جای عدد ماه، نام ماه را ترجیح میدهید، میتوانید از تابع Date.MonthName استفاده کنید. این تابع همچنین از یک کد فرهنگ (Culture code) اختیاری پشتیبانی میکند که امکان قالببندی تاریخ بر اساس یک منطقه جغرافیایی خاص (Locale) را فراهم میکند.
let
myDate= #date( 2024, 6, 29 ),
extractMonth = Date.MonthName( myDate ), // Output: "June"
extractFrenchMonth = Date.MonthName( myDate, "fr-FR" ) // Output: "juin"
in
extractFrenchMonth
در این مثال، ما از همان مقدار تاریخ myDate استفاده میکنیم. تابع Date.MonthName این تاریخ را به نام ماه تبدیل میکند که بر اساس تنظیمات زبان پیشفرض کامپیوتر شما است. از آنجایی که کامپیوتر من روی زبان انگلیسی تنظیم شده است، نتیجه «June» خواهد بود. اما با مشخص کردن کد فرهنگ ‘fr-FR’، نام ماه به زبان فرانسوی تبدیل میشود که «juin» خواهد بود.
استفاده از تابع Date.ToText
برای قالببندی ماه به یک رشته متنی خاص، میتوانید از تابع Date.ToText استفاده کنید. به عنوان مثال، این تابع میتواند عدد ماه را به صورت یک یا دو رقمی به شکل متنی با استفاده از رشتههای قالببندی زیر برگرداند:
let
myDate= #date( 2024, 6, 29 ),
singleDigitMonth = Date.ToText( myDate, [Format = "%M"] ), // Output: "6"
doubleDigitMonth = Date.ToText( myDate, [Format = "MM"] ) // Output: "06"
in
doubleDigitMonth
این تابع همچنین از هر دو پارامتر رشته قالببندی (Format string) و فرهنگ (Culture) پشتیبانی میکند. در ادامه دو روش نشان داده شده است که چگونه میتوانید از آنها استفاده کنید:
let
myDate= #date( 2024, 6, 29 ),
extractMonthName_nlNL =
Date.ToText( myDate, [Format = "MMMM", Culture = "nl-NL"] ), // Output: "juni"
extractMonthName_enUS =
Date.ToText( myDate, [Format = "MMM", Culture = "en-US"] ) // Output: "Jun"
in
extractMonthName_enUS
در این مثالها، تابع Date.ToText برای قالببندی نام ماه بر اساس فرهنگهای مختلف استفاده شده است. مثال اول نام کامل ماه را به زبان هلندی («juni») برمیگرداند و مثال دوم نام مختصر ماه را به زبان انگلیسی («Jun») نمایش میدهد. برای مشاهده تمام رشتههای قالببندی موجود برای تاریخها، این مقاله را مطالعه کنید.
چه زمانی از هر تابع استفاده کنیم؟
استفاده از Date.Month: زمانی که نیاز به ماه به صورت عدد (Number) دارید، مثلاً برای عملیات ریاضی یا زمانی که ماه بخشی از تبدیلهای دادهای بعدی باشد.
استفاده از Date.MonthName: زمانی که نیاز به نام ماه دارید، بهخصوص برای مقاصد نمایش (Display) یا وقتی میخواهید نام ماه را بر اساس فرهنگهای مختلف قالببندی کنید.
استفاده از Date.ToText: زمانی که نیاز به قالببندی سفارشی ماه دارید. نمونههای خوب شامل برگرداندن روز به صورت متن یک یا دو رقمی یا استفاده از رشته قالببندی سفارشی است.
استخراج روز از مقدار تاریخ
شما همچنین میتوانید مقدار روز را از یک تاریخ به چند روش استخراج کنید.
استفاده از تابع Date.Day
تابع Date.Day روز را از تاریخ استخراج کرده و به صورت عدد برمیگرداند. این عدد نشاندهنده روز ماه است. در اینجا یک مثال آورده شده است:
let
myDate= #date( 2024, 6, 29 ),
extractDay = Date.Day( myDate ) // Output: 29
in
extractDay
در این مثال، تابع Date.Day روز را از این تاریخ استخراج میکند که مقدار آن ۲۹ است.
استفاده از تابع Date.DayOfWeek
برای بهدست آوردن روز هفته، میتوانید از تابع Date.DayOfWeek استفاده کنید. این تابع روز هفته را به صورت عددی بازمیگرداند، که در آن عدد ۰ نشاندهنده دوشنبه (Monday) و عدد ۶ نشاندهنده یکشنبه (Sunday) است.
let
myDate= #date( 2024, 6, 29 ),
extractDay = Date.DayOfWeek( myDate ) // Output: 5
in
extractDay
در این مثال، تابع Date.DayOfWeek روز هفته را از تاریخ myDate که برابر با ۲۹ ژوئن ۲۰۲۴ است استخراج میکند. نتیجه نشان میدهد که این تاریخ مصادف با روز شنبه است، که مقدار عددی آن با شاخص صفر-مبنا برابر با ۵ میباشد.
اگر بخواهید روز هفته را با شروع از روز دیگری محاسبه کنید، میتوانید پارامتر اختیاری Day.Type را مشخص کنید. به عنوان مثال، اگر بخواهید هفته از روز چهارشنبه شروع شود، میتوانید به این صورت تنظیم کنید:
let
myDate= #date( 2024, 6, 29 ),
extractDay = Date.DayOfWeek( myDate, Day.Wednesday ) // Output: 3
in
extractDay
در این حالت، تابع مقدار ۳ را بازمیگرداند که نشان میدهد ۲۹ ژوئن ۲۰۲۴، چهارمین روز هفته است هنگامی که هفته از روز چهارشنبه شروع میشود.
استفاده از تابع Date.DayOfYear
تابع Date.DayOfYear روز سال را از یک تاریخ استخراج کرده و آن را به صورت عددی برمیگرداند. این عدد نشاندهنده موقعیت روز در طول سال است. در اینجا یک مثال آورده شده است:
let
myDate = #date(2024, 6, 29),
extractDay = Date.DayOfYear(myDate) // Output: 181
in
extractDay
در این مثال، تابع Date.DayOfYear روز سال را از تاریخ ۲۹ ژوئن ۲۰۲۴ استخراج میکند. این تابع عدد ۱۸۱ را برمیگرداند که نشان میدهد این روز، ۱۸۱امین روز سال است.
استفاده از تابع Date.DaysInMonth
تابع Date.DaysInMonth تعداد کل روزهای ماه را از یک تاریخ استخراج کرده و به صورت عددی بازمیگرداند. در اینجا یک مثال آورده شده است:
let
myDate = #date(2024, 6, 29),
extractDay = Date.DaysInMonth(myDate) // Output: 30
in
extractDay
در این مثال، تابع Date.DaysInMonth تعداد روزهای ماه مربوط به تاریخ myDate را که برابر با ژوئن ۲۰۲۴ است، تعیین میکند. این تابع عدد ۳۰ را برمیگرداند که نشان میدهد ماه ژوئن ۳۰ روز دارد.
استفاده از تابع Date.DayOfWeekName
تابع Date.DayOfWeekName نام روز هفته را از یک تاریخ استخراج میکند. میتوانید این مقدار را به صورت یک فیلد مستقل در ویژوالهای گزارش خود استفاده کنید یا آن را با مقادیر متنی دیگر در ستونهایتان ترکیب کنید. در اینجا یک مثال آورده شده است:
let
myDate = #date(2024, 6, 29),
dayOfWeekName = Date.DayOfWeekName(myDate) // Output: "Saturday"
in
dayOfWeekName
شما میتوانید بهصورت اختیاری یک کد فرهنگ (Culture code) نیز ارائه دهید تا قالببندی تابع دقیقتر و مطابق با زبان یا منطقه خاصی انجام شود:
let
myDate = #date(2024, 6, 29),
dayOfWeekName = Date.DayOfWeekName(myDate, "ES-es" ) // Output: "sábado"
in
dayOfWeekName
در این مثال، نام روز هفته به زبان اسپانیایی برای تاریخ ۲۹ ژوئن ۲۰۲۴، «sábado» است.
استفاده از تابع Date.ToText
برای قالببندی نام روز هفته به صورت خاص یا در زبان دلخواه، از تابع Date.ToText استفاده کنید. این تابع برای قالببندیهای سفارشی یا متناسب با منطقه جغرافیایی (Locale-specific) بسیار کاربردی است.
let
myDate= #date( 2024, 6, 9 ),
extractDay_singleDigit = Date.ToText( myDate, [Format = "%d"] ) // Output: 9
extractDay_doubleDigit = Date.ToText( myDate, [Format = "dd"] ) // Output: 09
extractDay_nameShort = Date.ToText( myDate, [Format = "ddd"] ) // Output: "Sun"
extractDay_Name = Date.ToText( myDate, [Format = "dddd"] ) // Output: "Sunday"
in
extractMonthName_enUS
در این مثال، تاریخ myDate (۹ ژوئن ۲۰۲۴) را به روشهای مختلف قالببندی میکنیم:
%d: روز به صورت عدد تک رقمی (۹)
dd: روز به صورت عدد دو رقمی (۰۹)
ddd: نام کوتاه روز هفته («Sun»)
dddd: نام کامل روز هفته («Sunday»)
چه زمانی از هر تابع استفاده کنیم؟
استفاده از Date.Day: زمانی که نیاز به روز ماه به صورت عددی دارید.
استفاده از Date.DayOfWeek: زمانی که نیاز به روز هفته به صورت عدد دارید، چه برای هفتههای استاندارد (۰ = یکشنبه) یا شروع هفته با روزهای دلخواه.
استفاده از Date.DayOfYear: زمانی که میخواهید موقعیت ترتیبی یک تاریخ در طول سال را بدانید. این مورد برای محاسبه پیشرفت سال، تعیین تعداد روزهای باقیمانده در سال یا هر تحلیلی که نیاز به اطلاعات روز در سال دارد، کاربردی است.
استفاده از Date.DaysInMonth: زمانی که نیاز دارید تعداد کل روزهای یک ماه را بدانید. این برای محاسبه آمار ماهانه، اعتبارسنجی بازههای تاریخی یا هر تحلیلی که نیازمند دانستن تعداد روزهای ماه خاص است، مفید است.
استفاده از Date.DayOfWeekName: زمانی که نیاز به نام روز هفته به صورت متن دارید. برای قالببندیهای جایگزین، مثل نسخه کوتاهشده، به تابع Date.ToText مراجعه کنید.
استفاده از Date.ToText: زمانی که میخواهید روز را به صورت متن قالببندی کنید، چه نام کوتاه، نام کامل یا نمایش عدد روز به صورت متن یک یا دو رقمی.
نتیجهگیری
زبان M در پاور کوئری مجموعهای از توابع کاربردی برای کار با تاریخها دارد. شما میتوانید اجزای پایهای مانند سال، ماه یا روز را استخراج کنید. اما این همه ماجرا نیست! اگر به نام ماه یا روز هفته نیاز دارید، توابعی مثل Date.MonthName و Date.DayOfWeekName در دسترساند. برای قالببندیهای بسیار خاص نیز، تابع Date.ToText با رشتههای قالببندی سفارشی بسیار انعطافپذیر است.
با استفاده از این توابع میتوانید اطلاعات تاریخ را بهطور کامل متناسب با نیازهای خود شکل دهید. بنابراین دفعه بعد که در حال ساخت جدول تقویم بودید، اکنون میدانید چه گزینههایی پیش رویتان است.
دیدگاهتان را بنویسید