You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 06:17:01