在Power BI-Power Query中将波斯日期文本转换为日期类型的问题
波斯日期转公历日期(Power BI/Power Query解决方案)
步骤1:拆分波斯日期的年、月、日
假设你的波斯日期是文本格式(如1402/05/20),先通过Power Query拆分出年、月、日数值:
- 添加自定义列提取年份:
Number.From(Text.BeforeDelimiter([波斯日期], "/")) - 添加自定义列提取月份:
Number.From(Text.BetweenDelimiters([波斯日期], "/", "/")) - 添加自定义列提取日期:
Number.From(Text.AfterDelimiter([波斯日期], "/"))
步骤2:创建波斯历转公历的自定义函数
在Power Query中新建空白查询,将以下代码粘贴进去,命名为PersianToGregorian:
(PersianYear as number, PersianMonth as number, PersianDay as number) as date => let PersianEpoch = #date(622, 3, 22), PersianYearDays = if PersianYear mod 33 = 11 then 366 else 365, Months = {31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, if PersianYearDays = 366 then 30 else 29}, DaysBeforeYear = (PersianYear - 1) * 365 + Number.RoundDown((PersianYear - 1) / 33) * 8 + Number.RoundDown((PersianYear - 1 - Number.RoundDown((PersianYear - 1)/33)*33)/4), DaysBeforeMonth = List.Sum(List.Range(Months, 0, PersianMonth - 1)), TotalDays = DaysBeforeYear + DaysBeforeMonth + PersianDay - 1, GregorianDate = Date.AddDays(PersianEpoch, TotalDays) in GregorianDate
步骤3:调用函数转换日期
回到原始数据查询,添加新的自定义列,输入公式:
try PersianToGregorian([波斯年], [波斯月], [波斯日]) otherwise null
try...otherwise用于处理无效的波斯日期(如月份>12、日期超过当月天数),返回null便于后续筛选处理。
步骤4:验证并使用转换后的日期
转换完成后,将新列的数据类型设置为「日期」,检查转换结果无误后,即可在报表中使用「介于」切片器进行日期筛选。
内容的提问来源于stack exchange,提问作者Shahriar Sajadii
相关产品推荐
相关产品推荐

