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

如何按日期将图表拆分为各含15天数据的两个部分

按日期维度拆分双15天区块图表的实现方案

原有方案异常原因

  • Top N筛选器方案:本质是按指标值排序取前后段数据,而非按日期自然顺序做区间切分,调整日期筛选范围时,排序对应的Top/Bottom边界会发生重叠,必然出现数据重复问题,缩小筛选范围时重叠占比升高,重复现象更明显。
  • 原有Flag标记方案:逻辑Flag = IF(DAY(MAX('Table'[Date]))<=15,1,2)存在两个核心错误:一是使用MAX聚合函数会让计算受当前筛选上下文干扰,返回结果不符合逐行日期判断的预期;二是直接提取日期的日度值分组,会跨月把所有月份的1-15日归为组1、16日及以后归为组2,日期排序自然错乱。

可行实现步骤

前置准备

优先新建独立的连续日期表,和业务表建立一对多的日期关联,不要直接用业务表自带的日期字段做维度计算。日期表可通过以下DAX新建:

日期表 = 
ADDCOLUMNS(
    CALENDAR(MIN('Table'[Date]), MAX('Table'[Date])),
    "年", YEAR([Date]),
    "月", MONTH([Date]),
    "年月", FORMAT([Date], "YYYY-MM"),
    "月内日序号", DAY([Date])
)

按需选择分组逻辑

根据拆分需求二选一即可:

  1. 按自然月拆分(每月固定拆1-15日、16日-月末两个区块)
    在日期表中新建计算列(注意是计算列,不是度量值):
日期分组 = 
VAR 日序号 = DAY('日期表'[Date])
RETURN IF(日序号 <= 15, "1-15日", "16日-月末")
  1. 按筛选范围动态拆分(无论筛选什么时间范围,自动切前15天、剩余天数为第二个区块)
    新建以下度量值:
动态日期分组 = 
VAR 筛选范围最小日期 = CALCULATE(MIN('日期表'[Date]), ALLSELECTED('日期表'[Date]))
VAR 当前日期间隔 = DATEDIFF(筛选范围最小日期, MIN('日期表'[Date]), DAY)
RETURN IF(当前日期间隔 < 15, "前15天", "后续时段")

图表配置

  • 准备两个相同的图表视觉对象,分别添加筛选条件:第一个图表筛选分组值为第一组,第二个筛选为第二组
  • 两个图表的X轴统一使用日期表[Date]字段,设置排序规则为按日期升序,不要按分组字段排序
  • 使用动态分组方案时,将分组度量值拖入对应图表的视觉级筛选器,勾选需要展示的分组值即可

避坑提示

  • 不要用Top N筛选器做日期区间类拆分:Top N逻辑依赖指标聚合值排序,和日期自然顺序无关,筛选范围变动后必然出现数据重复、遗漏问题
  • 编写分组逻辑时,计算列和度量值的适用场景不要混淆:逐行固定属性的标记用计算列,随筛选范围动态变化的逻辑用度量值,不要随意在逐行判断逻辑中套MAX、MIN类聚合函数
  • 所有时间维度计算优先使用独立日期表,避免业务表日期存在断层、重复值导致的计算异常

内容的提问来源于stack exchange,提问作者shubham yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 23:57:19