3. DAX 时间函数-- DATE 日期--一生二,二生三,三生万物
在数据分析过程中,经常需要从一个数据推到另外一个数据,日期数据也是如此,需要从一个日期推到另外一个相关的日期,或者从一群日期推到另外一个相关的日期/一群相关的日期。这一期说的就是日期之间彼此推衍的函数,会比之前复杂不少。
第一部分

先用 1. DAX 时间函数--生成日期表_monthno是什么函数-CSDN博客 中提到的 CALENDAR 函数生成日期表。

1) DATEADD 函数:
返回一个单列的日期表,将当前筛选上下文中的日期按指定的间隔向未来或者过去平移。
该函数一看是一个非常有用的函数,事实上它非常鸡肋,非常鸡肋。
语法:DATEADD ( <日期列>, <偏移量>, <偏移单位> )
日期列: DATE 格式的数据列,请注意网上有一句话 :"如果日期列中的数据不是连续间隔,则函数回返回错误"???What,这么设计是为啥,我完全不明白! 现实世界的数据没有这么完美的! 以上是微软官方网站的解释,不死心的我决定直接试试,我生成了一个不连续的数据表 sheet1,待会我们试试。
偏移量: 偏移的数量,是一个数字标量。 指定了正数,则日期列中的日期向未来推移;如果指定的数字为负数,则日期列中的日期向过去推移 。
偏移单位:可以是年 YEAR、月 MONTH、季度 QUARTER、日 DAY
但是请一定注意,下面的用法是错误的,因为 DATEADD 返回的是表!!! DATEADD 返回的是表!!!DATEADD 返回的是表!!!,不能产生新列!
这么设计是为啥,我也完全不明白! ,生成列比生成表好用多了。

好了,现在我们来试试那个微软官方注释是否正确吧。结果真的让我莫名其妙! 
看官们看出来了没有,面对不连续的数据,DATEADD没有报错啊,那个微软官方解释造谣?!可是我仔细看了下,更悲伤了,因为数据丢了!原来sheet1中提供了 7 条日期数据,但是新生成的表格中只有 5 条数据!why?!!!难道我一开始的理解有重大误区。你还别说,是的!
我重新试了很多种数据组合,搭配 DATEADD,大家瞪大眼睛看吧。第一种sheet1数据如下:

第二种sheet1数据如下:

总结:
1)日期列数据不连续不会报错!但是会对<日期列>重新排序
2)DATEADD 不是如我希望的那样把日期列数据依次推迟或推前,它是在现有数据中进行筛选,现有数据中如果有符合日期要求的留下来,不符合日期要求的剔除。怎么算符合日期要求呢?有一个逻辑:首先使用<日期列>中最早的那个日期,使用上<偏移量>, <偏移单位> 得到一个新的日期<新日期>。
比如sheet1第二部分数据中<日期列> 最早的日期是20240120,当<偏移量>, <偏移单位>是 2,DAY 时候,得到 <新日期> 即 20240122,那么原来的<日期列>中大于等于20240122的日期则形成了新表。
当<偏移量>, <偏移单位>是 1,QUARTER 时候,得到 <新日期> 即 202404,请注意是202404,即只要大于等于20240401即可,而不是一定要大于202420,那么原来的<日期列>中大于等于20240401的日期则形成了新表。
当<偏移量>, <偏移单位>是 1,MONTH 时候,得到 <新日期> 即 202402,那么原来的<日期列>中大于等于202404的日期则形成了新表。
说实话,我觉得这个用法好奇特!后来我想明白了,DATEADD 这个名字起错了,如果使用 DATEFILTER 或者 DATECHOOSE,感觉就会好多了。
2) DATEDIFF 函数:返回两个日期之间指定的间隔数。
语法:DATEDIFF ( <日期 1>, <日期 2>, <间隔单位> )
<日期 1>, <日期 2>, 都是日期格式的数据,<间隔单位> 则是有YEAR、MONTH、DAY、QUARTER、WEEK、HOUR、MINUTE、SECOND 8 个枚举变量。
我准备了一组数据,分别使用了这个8个枚举变量,结果如下:
总结一下详细用法:
a) 针对 YEAR、MONTH、DAY、QUARTER、WEEK、HOUR、MINUTE、SECOND 8 个枚举变量,DATEDIFF 比较的是其枚举量对应的值,如 YEAR,只比较年份,比如 20240528 和 20250109, 实际时间不到半年,但是DATEDIFF的结果是1。
b) <日期 1>早于 <日期 2>,则值为正值,相等为 0,反之为负值。
这个函数挽救了我被 DATEADD 伤害到的脆弱心灵。
3) DATESBETWEEN 函数
返回一个表,返回一个包含一列日期的表,这些日期以指定开始日期,一直持续到指定的结束日期。其实这就是一种筛选,这次名字起得比较好,比 DATEADD 强多了。
语法:DATESBETWEEN ( <日期列>, <起始日期>, <截止日期> )
给大家看一个用法:
4) DATESINPERIOD 函数
返回一个表,此表包含一列日期,日期以指定的开始日期开始,并按照指定的日期间隔一直持续到指定的数字。
DATESINPERIOD ( <日期列>, <起始日期>, <偏移量>, <间隔单位>
这个函数又一次伤到了我!它和DATEADD函数非常类似,也是筛选日期,区别在于它增加了一个<起始日期>,使逻辑更加复杂(或者说高效?)。但是在计算新日期时候两者有很大区别,DATEADD 是按照自然月、年等来计算,而 DATESINPERIOD 是按照周期月、年来计算。
总结一下用法:
a)如果<偏移量>是正值,
首先要在<日期列> 找出大于等于 <起始日期> 的所有值, 如没有则返回空表,结束。
接着在找到的值中寻找出最早的日期值<最早日期值>,然后根据<偏移量>, <间隔单位>得到一个新的日期值<最晚日期值>;
比如<偏移量>, <间隔单位>是2,DAY,从下面的数据中,筛选出<最早日期值>20240225和<最晚日期值> 20240226;
比如<偏移量>, <间隔单位>是1,MONTH,从下面的数据中,筛选出<最早日期值>20240225和<最晚日期值> 20240324;
最后使用<最早日期值>和 <最晚日期值>来筛选区间内的日期值。 
b)如果<偏移量>是负值,
首先要在<日期列> 找出小于等于 <起始日期> 的所有值, 如没有则返回空表,结束。
接着在找到的值中寻找出最晚的日期值<最晚日期值>,然后根据<偏移量>, <间隔单位>得到一个新的日期值<最早日期值>;
比如<偏移量>, <间隔单位>是 -4,DAY,从下面的数据中,筛选出<最早日期值>20240328和<最晚日期值> 20240325;
比如<偏移量>, <间隔单位>是-1,MONTH,从下面的数据中,筛选出<最早日期值>20240228和<最晚日期值> 20240127;
最后使用<最早日期值>和 <最晚日期值>来筛选区间内的日期值。 
5) DATESMTD 函数
返回一个表,此表包含当前上下文中该月份至今的一列日期。
语法:DATESMTD ( <日期列> )
还用下面语句生成的日期表
日期表 = CALENDAR( DATE( 2024 , 2, 25) ,DATE( 2024 , 5 , 10 ) )
此时可以看出它是找出最晚的一个月的所有日期表。
6) DATESQTD 函数
函数返回一个表,此表包含当前上下文中该季度至今的一列日期。
语法:DATESQTD ( <日期列> ),这个从月换成季度,不再赘述
7) DATESYTD 函数
函数返回一个表,其中包含当前筛选上下文中当前年份至今的所有日期。
语法:DATESYTD ( <日期列> , [年截止日期] );
这个和DATESMTD、DATESQTD的区别在于新增了一个可选的参数[年截止日期] ;有了这个[年截止日期] 则不是默认筛选出来整年的日期,而是到了[年截止日期] 就可以了。
8) LASTDATE 函数
返回指定日期列在当前上下文中的最后一个非空日期。
语法:LASTDATE ( <日期列> )
还用该语句生成:日期表 = CALENDAR( DATE( 2024 , 2, 25) ,DATE( 2024 , 5 , 10 ) )
9) FIRSTDATE 函数
返回指定日期列在当前上下文中的最前一个非空日期。
语法:FIRSTDATE ( <日期列> )
还用该语句生成:日期表 = CALENDAR( DATE( 2024 , 2, 25) ,DATE( 2024 , 5 , 10 ) ) 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·~~~~~~这篇博客写了 3 天,麻烦点个赞或者收藏再走吧!谢谢同学!~~~~~~~~~~~~~~~~
相关文章:
3. DAX 时间函数-- DATE 日期--一生二,二生三,三生万物
在数据分析过程中,经常需要从一个数据推到另外一个数据,日期数据也是如此,需要从一个日期推到另外一个相关的日期,或者从一群日期推到另外一个相关的日期/一群相关的日期。这一期说的就是日期之间彼此推衍的函数,会比之…...
c 解数独(通用方法,适用于9×9 数独)
折腾了一周时间,终于搞定99数独通用方法 思路:1.生成每行空位的值,也就是1-9中除去非0的数。 2.用行,列,宫判断每行中每个空位的最小取值范围后再重新生成每行。 3.随机提取生成的9行,判断每列之和是否等…...
一篇文章深入学习Java的AQS(AbstractQueuedSynchronizer)
深入理解AQS的设计和工作机制 Oracle官方文档中的AbstractQueuedSynchronizer部分讲解 AbstractQueuedSynchronizer(简称AQS)是Java并发包中的一个基础框架,它为实现依赖单个原子变量来表示状态的同步器提供了可靠的基础。这个框架被广泛用…...
Linux sed
文章目录 1. 基本功能2.sed替换ssed配合grep和管道操作符的例子 3.sed中的删除和添加3.1 d删除3.2 a i添加添加多行 4.sed行替换替换包含某字符的行 5.单字符替换 y6. p打印命令打印含有目标字符的行sed中包含多个指令,使用{} 7.sed w 写入文件8.sed r 读取文件9.se…...
【MySQL】MySQL在Centos 7环境安装
目录 准备工作 第一步:卸载不要的环境 第二步:下载官方的mysql 第三步 上传到Linux中 第四步 安装 正式安装 启动 编辑 登录 准备工作 第一步:卸载不要的环境 使用root进行安装 如果是普通用户,使用 su - 命令&#…...
【CSS】一篇文章讲清楚screen、window和html元素的位置:top、left、width、height
一个Web网页从内到外的顺序是: 元素div,ul,table... → 页面body → 浏览器window → 屏幕screen 分类详情屏幕screen srceen.width - 屏幕的宽度 screen.height - 屏幕的高度(屏幕未缩放时,表示屏幕分辨率) screen.availLeft …...
铸造大型基础平板的结构应该怎样设计
设计大型基础平板的结构时,需要考虑以下几个方面: 地质条件:首先要了解工程所在地的地质条件,包括土质、地下水位、地震状况等。根据地质条件来选择合适的基础类型,如浅基、深基或地下连续墙等。 荷载分析:…...
医院预约系统微信小程序APP前后端
医院预约系统具体功能介绍:展示信息、可以注册和登录, 预约(包含各个科室的预约,可以预约每个各个医生),就诊引导包含预约的具体信息,包含就诊时间、就诊科室、就诊医生以及就诊人信息、和支付状…...
springboot数字化智慧城市管理系统源码
目录 系统开发环境 系统功能模块 系统特点 1、智慧城管移动端 2、案件受理 3、AI视频智识别分析 系统应用价值 1、提升案件办理效率 2、提升监管效能 3、提升行政执法水平 4、推进行政执法创新 智慧城管综合执法办案系统功能 现场移动执法 一般程序案件的网上办…...
【鸿蒙开发】第二十一章 Media媒体服务(一)
1 简介 Media Kit(媒体服务)提供了AVPlayer和AVRecorder用于播放、录制音视频。 在Media Kit的开发指导中,将介绍各种涉及音频、视频播放或录制功能场景的开发方式,指导开发者如何使用系统提供的音视频API实现对应功能。比如使用…...
【QT教程】QT6 Web应用实战
QT6 Web应用实战 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免费…...
(我的创作纪念日)[MySQL]数据库原理7——喵喵期末不挂科
希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…...
普乐蛙VR航天体验馆设备VR太空飞船VR元宇宙展厅
三天小长假就要来啦!五一假期也即将到来。老板们想捉住人流量这个财富密码吗?那快快行动起来!开启VR体验项目,假期赚翻天!小编亲测!!这款设备刺激好玩,想必会吸引各位家长小孩、学生…...
基于torch的图像识别训练策略与常用模块
数据预处理部分: 数据增强:torchvision中transforms模块自带功能,比较实用数据预处理:torchvision中transforms也帮我们实现好了,直接调用即可DataLoader模块直接读取batch数据 网络模块设置: 加载预训练…...
微信小程序制作圆形进度条
微信小程序制作圆形进度条 1. 建立文件夹 选择一个目录建立一个文件夹,比如 mycircle 吧,另外把对应 page 的相关文件都建立出来,包括 js,json,wxml 和 wxcc。 2. 开启元件属性 在 mycircle.json中开启 component 属…...
大模型(Large Models):探索人工智能领域的新边界
🌟文章目录 🌟大模型的定义与特点🌟模型架构🌟大模型的训练策略🌟大模型的优化方法🌟大模型的应用案例 随着人工智能技术的飞速发展,大模型(Large Models)成为了引领深度…...
缓存相关知识总结
一、缓存的作用和分类 缓存可以减少数据库的访问压力,提升整个网站的数据访问速度,改善数据库的写入性能。缓存可以分为两种: 缓存在应用服务器上的本地缓存:访问速度快,但受应用服务器内存限制 缓存在专门的分布式缓存…...
Mapmost Alpha:开启三维城市场景创作新纪元
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...
【大模型完全入门手册】——引言
博主作为一名大模型开发算法工程师,很希望能够将所学到的以及实践中感悟到的内容梳理成为书籍。作为先导,以专栏的形式先整理内容,后续进行不断更新完善。希望能够构建起从理论到实践的全流程体系。 助力更多的人了解大模型,接触大模型,一起感受AI的魅力! 在当今人工智能…...
在 Vue 3 中使用 Axios 发送 POST 请求
在 Vue 3 中使用 Axios 发送 POST 请求需要首先安装 Axios,然后在 Vue 组件或 Vuex 中使用它。以下是一个简单的安装和使用案例: 安装 Axios 你可以使用 npm 或 yarn 来安装 Axios: npm install axios # 或者 yarn add axios 使用 Axios…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...
Spring AOP代理对象生成原理
代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】,这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...
Mysql故障排插与环境优化
前置知识点 最上层是一些客户端和连接服务,包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念,为通过安全认证接入的客户端提供线程。同样在该层上可…...
