问答 查看内容
返回列表

日期筛选器粒度为周时,最近有效时间选数据集日期字段无法取到最新日期的所在周

45 1
发表于 昨天 15:16 | 查看全部 阅读模式
日期筛选器粒度为周时,最近有效时间选数据集日期字段无法取到最新日期的所在周,怎么处理呢?貌似只要粒度不是“日”,默认值选最近有效时间都无法正常展示。

评论1

观小凡楼主Lv.9 发表于 昨天 15:18 | 查看全部
解决方案:在筛选器或者数据集里新建计算字段,把日期转换为周的文本格式,用于展示默认值,然后联动卡片里的日期类型字段。
非直连数据集参考以下Spark函数,直连数据集请使用数据库对应写法:
  1. 年:year([日期])
  2. 月:date_format([日期],"yyyy-MM")
  3. 季:concat(year([日期]),' Q',quarter([日期]))
  4. 周:date_format([日期],"yyyy 'W'ww")
复制代码

截图202604171517434574.png 截图202604171517567553.png
联动效果如下:
截图202604171518215532.png

注意事项
1. 季和周函数返回的实际值(2025 W37),和筛选器展示的格式(2025-37周)不一致,但不影响使用;但如果计算字段使用 date_format([日期],"yyyy-ww '周'")返回2025-37周,反而无法正常展示和联动卡片。
2. 最新日期周数小于10时,date_format([日期],"yyyy 'W'ww")返回的周数带前导零,例如‘2025 W09’,不符合筛选器默认的格式,筛选器会展示为空,但卡片联动不受影响。但是如果去掉前导零,改为date_format([日期],"yyyy 'W'w"),则会导致周数大于等于10时,系统返回的最大周数永远为第九周‘2025 W9’。这是因为该函数返回的是文本类型,文本判断大小的逻辑和日期数值不一样,此时'9'>'37'。如果想要筛选器一直展示正常,则建议如果数据集行数不是太多的情况下,在数据集里新建计算字段,使用窗口函数获取最大日期并判断所在周是否小于10。参考以下Spark函数写法。窗口函数比较耗性能,计算较慢,不建议用于大数据量数据集,不建议在筛选器里直接创建。
  1. case when weekofyear(max([日期])over(partition by 1))<10
  2. then date_format([日期],"yyyy 'W'w")
  3. else date_format([日期],"yyyy 'W'ww")
  4. end
复制代码

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

微信服务号
联系我们
电话:400-880-0750
邮箱:hello@guandata.com
Copyright © 2001-2026 观远社区 版权所有 All Rights Reserved. 浙 ICP 备15006424号-3
去回复 去发帖 返回顶部
快速回复 返回顶部 返回列表