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

Power BI日期范围切片器制作:按年份筛选项目的实现方案

问题背景

原始项目数据表:

项目名称阶段开始日期结束日期
Project A管道工程March 7th, 2022September 11th, 2025
Project A翻新工程September 13th, 2023May 4th, 2025
Project A评估September 13th, 2023January 31st, 2026

需求:创建年份切片器,选择2024时需显示Project A(该项目所有阶段在2024年都处于进行中)。此前已用pandas将表逆转为以下结构,但无法实现需求:

项目名称阶段状态日期
Project A管道工程开始March 7th, 2022
Project A管道工程结束September 11th, 2025
Project A翻新工程开始September 13th, 2023
Project A翻新工程结束May 4th, 2025
Project A评估开始September 13th, 2023
Project A评估结束January 31st, 2026

解决方案

方案一:Power BI内通过度量值实现(无需修改原始表结构)

  1. 先修正日期类型:确保原始表的开始日期和结束日期是Power BI可识别的日期格式(数据视图中选中列,在“列工具”里转换为日期类型)。
  2. 创建独立年份切片器表:
    • 进入「建模」选项卡 → 新建表,输入DAX公式:
      年份表 = CALENDARAUTO()
      
    • 在这个新建表中添加年份提取列:
      年份 = YEAR('年份表'[Date])
      
    • 把年份字段拖到视觉对象面板,创建年份切片器。
  3. 编写判断度量值:
    项目是否在年份内 = 
    VAR 选中年份 = SELECTEDVALUE('年份表'[年份])
    RETURN
    IF(
        COUNTROWS(
            FILTER(
                '原始项目表',
                YEAR('原始项目表'[开始日期]) <= 选中年份 && YEAR('原始项目表'[结束日期]) >= 选中年份
            )
        ) > 0,
        "显示",
        "隐藏"
    )
    
  4. 应用筛选:在卡片/表格的「筛选器」面板中,添加项目是否在年份内,设置为等于“显示”。

选择2024时,所有满足「开始年份≤2024且结束年份≥2024」的项目会被自动筛选出来。

方案二:导入前通过Python生成年份范围行

如果要在导入Power BI前完成数据转换,用pandas生成每个项目阶段覆盖的所有年份:

  1. 转换日期类型并生成年份范围:
    import pandas as pd
    
    # 读取原始数据表
    df = pd.read_excel("你的数据文件路径.xlsx")
    # 转换日期列格式
    df["开始日期"] = pd.to_datetime(df["开始日期"])
    df["结束日期"] = pd.to_datetime(df["结束日期"])
    
    # 生成每个阶段覆盖的年份列表
    def get_year_range(row):
        start_year = row["开始日期"].year
        end_year = row["结束日期"].year
        return list(range(start_year, end_year + 1))
    
    df["覆盖年份"] = df.apply(get_year_range, axis=1)
    # 展开年份列,生成多行数据
    df_final = df.explode("覆盖年份", ignore_index=True)
    
  2. 最终表结构示例:
    项目名称阶段开始日期结束日期覆盖年份
    Project A管道工程2022-03-072025-09-112022
    Project A管道工程2022-03-072025-09-112023
    Project A管道工程2022-03-072025-09-112024
    Project A管道工程2022-03-072025-09-112025
    ...............

将这个表导入Power BI后,直接用覆盖年份做切片器,就能筛选出对应年份的项目。


为什么之前的逆透视结构无效?

逆透视后的表只有「开始」「结束」两个单独日期点,切片器选择2024时,只会匹配日期等于2024的行,但你的数据里没有2024年的日期记录,因此无法筛选出项目。必须基于年份范围的包含关系判断,而非单个日期点匹配。

内容的提问来源于stack exchange,提问作者Muhammad Galang Gardamukti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 00:38:19