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

如何在Crossfilter中按当日及昨日日期自动筛选数据?

嗨,很高兴能帮到你!针对你用Crossfilter筛选当日、昨日数据做图表对比的需求,我来给你梳理具体实现方法:

1. 先写一个日期格式化工具函数

Crossfilter的filterExact要求筛选值和数据中的日期格式完全匹配(比如你示例里的"1.1.2018"),所以我们需要一个能生成对应格式日期字符串的函数,还支持偏移天数(0=当日,-1=昨日):

// 生成指定偏移天数的日期字符串(格式:日.月.年,和你的示例格式一致)
function getTargetDate(offsetDays = 0) {
  const currentDate = new Date();
  // 调整日期:offsetDays为0是今天,-1是昨天,1是明天,以此类推
  currentDate.setDate(currentDate.getDate() + offsetDays);
  
  const day = currentDate.getDate();
  const month = currentDate.getMonth() + 1; // 注意:JS里月份是0-11,所以要加1
  const year = currentDate.getFullYear();
  
  // 返回和你数据匹配的日期格式
  return `${day}.${month}.${year}`;
}

2. 用函数获取当日/昨日日期,应用到Crossfilter

有了工具函数,就能轻松拿到需要筛选的日期,然后分别给两张图表生成统计数据:

// 获取当日、昨日的格式化日期字符串
const today = getTargetDate();
const yesterday = getTargetDate(-1);

// 图表1:筛选当日数据,计算总和(记得把d.value换成你实际的数值字段)
const countToday = Dim2.filterExact(today).group().reduceSum(d => d.value);

// 图表2:筛选昨日数据,计算总和
const countYesterday = Dim2.filterExact(yesterday).group().reduceSum(d => d.value);

小提示:适配不同日期格式

如果你的数据日期格式不是日.月.年(比如常见的YYYY-MM-DD),只需要修改getTargetDate的返回格式即可,比如:

// 生成YYYY-MM-DD格式的日期(带前导零)
function getTargetDate(offsetDays = 0) {
  const currentDate = new Date();
  currentDate.setDate(currentDate.getDate() + offsetDays);
  
  const day = currentDate.getDate().toString().padStart(2, '0');
  const month = (currentDate.getMonth() + 1).toString().padStart(2, '0');
  const year = currentDate.getFullYear();
  
  return `${year}-${month}-${day}`;
}

关键要保证生成的日期字符串和你Crossfilter数据源里的日期字段完全一致,包括分隔符、数字位数(比如1月是"1"还是"01"),这样filterExact才能精准匹配。

祝你图表制作顺利,新年快乐!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:43:37