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

如何用PowerBI基于SQL历史数据表实现年度数据快照分析?

按年份切片展示产品状态快照的可行方案

完全可以实现,核心是通过DAX度量值结合独立日期表匹配切片器的年份选择,以下是具体实现步骤:

前提条件

确保你的产品数据表包含以下关键字段:

  • 产品ID(唯一标识)
  • 创建日期(产品上线日期)
  • 过期日期(产品下线日期,空值代表永久有效)

步骤1:创建独立日期表

不要直接使用产品表的日期字段做切片器,避免筛选逻辑冲突。用DAX生成一个包含年份的日期表:

日期表 = 
ADDCOLUMNS(
    CALENDARAUTO(),
    "年份", YEAR([Date])
)

将该表的「年份」字段拖到画布上作为切片器,用于选择目标年份。

步骤2:编写DAX度量值

根据不同产品状态的定义,编写对应的度量值:

1. 新增产品数量

统计所选年份内创建的产品总数:

新增产品数量 = 
VAR 目标年份 = SELECTEDVALUE('日期表'[年份])
RETURN
CALCULATE(
    DISTINCTCOUNT('产品表'[产品ID]),
    YEAR('产品表'[创建日期]) = 目标年份
)

2. 活跃产品数量

统计截止到所选年份12月31日仍处于活跃状态的产品(创建于当年或之前,且未过期/永久有效):

活跃产品数量 = 
VAR 目标年份 = SELECTEDVALUE('日期表'[年份])
VAR 当年年末 = DATE(目标年份, 12, 31)
RETURN
CALCULATE(
    DISTINCTCOUNT('产品表'[产品ID]),
    '产品表'[创建日期] <= 当年年末,
    OR('产品表'[过期日期] >= DATE(目标年份, 1, 1), ISBLANK('产品表'[过期日期]))
)

3. 当年过期产品数量

统计所选年份内到期的产品:

当年过期产品数量 = 
VAR 目标年份 = SELECTEDVALUE('日期表'[年份])
RETURN
CALCULATE(
    DISTINCTCOUNT('产品表'[产品ID]),
    YEAR('产品表'[过期日期]) = 目标年份
)

步骤3:展示产品列表(可选)

如果需要展示具体产品明细,可创建计算列标记产品当年状态,再结合视觉对象筛选:

产品当年状态 = 
VAR 目标年份 = SELECTEDVALUE('日期表'[年份])
VAR 当年年末 = DATE(目标年份, 12, 31)
RETURN
SWITCH(
    TRUE(),
    YEAR('产品表'[创建日期]) = 目标年份, "新增",
    '产品表'[创建日期] <= 当年年末 && OR('产品表'[过期日期] >= DATE(目标年份, 1, 1), ISBLANK('产品表'[过期日期])), "活跃",
    YEAR('产品表'[过期日期]) = 目标年份, "过期",
    "其他"
)

将产品名称、ID等字段拖到表格视觉对象,再在筛选器中选择对应状态(如“活跃”),即可展示该年份的目标产品列表。

注意事项

  • 确保SQL数据库中的日期字段为标准datetime类型,Power BI能正确解析年份。
  • 如果产品状态包含更复杂的历史变更(如中途暂停),需结合状态历史记录表调整DAX逻辑,通过时间范围判断产品在目标年份内的状态。

内容的提问来源于stack exchange,提问作者NotYour CuppaChai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:10:38