当前位置: 首页 > news >正文

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 日期--一生二,二生三,三生万物

在数据分析过程中&#xff0c;经常需要从一个数据推到另外一个数据&#xff0c;日期数据也是如此&#xff0c;需要从一个日期推到另外一个相关的日期&#xff0c;或者从一群日期推到另外一个相关的日期/一群相关的日期。这一期说的就是日期之间彼此推衍的函数&#xff0c;会比之…...

c 解数独(通用方法,适用于9×9 数独)

折腾了一周时间&#xff0c;终于搞定99数独通用方法 思路&#xff1a;1.生成每行空位的值&#xff0c;也就是1-9中除去非0的数。 2.用行&#xff0c;列&#xff0c;宫判断每行中每个空位的最小取值范围后再重新生成每行。 3.随机提取生成的9行&#xff0c;判断每列之和是否等…...

一篇文章深入学习Java的AQS(AbstractQueuedSynchronizer)

深入理解AQS的设计和工作机制 Oracle官方文档中的AbstractQueuedSynchronizer部分讲解 AbstractQueuedSynchronizer&#xff08;简称AQS&#xff09;是Java并发包中的一个基础框架&#xff0c;它为实现依赖单个原子变量来表示状态的同步器提供了可靠的基础。这个框架被广泛用…...

Linux sed

文章目录 1. 基本功能2.sed替换ssed配合grep和管道操作符的例子 3.sed中的删除和添加3.1 d删除3.2 a i添加添加多行 4.sed行替换替换包含某字符的行 5.单字符替换 y6. p打印命令打印含有目标字符的行sed中包含多个指令&#xff0c;使用{} 7.sed w 写入文件8.sed r 读取文件9.se…...

【MySQL】MySQL在Centos 7环境安装

目录 准备工作 第一步&#xff1a;卸载不要的环境 第二步&#xff1a;下载官方的mysql 第三步 上传到Linux中 第四步 安装 正式安装 启动 ​编辑 登录 准备工作 第一步&#xff1a;卸载不要的环境 使用root进行安装 如果是普通用户&#xff0c;使用 su - 命令&#…...

【CSS】一篇文章讲清楚screen、window和html元素的位置:top、left、width、height

一个Web网页从内到外的顺序是&#xff1a; 元素div,ul,table... → 页面body → 浏览器window → 屏幕screen 分类详情屏幕screen srceen.width - 屏幕的宽度 screen.height - 屏幕的高度&#xff08;屏幕未缩放时&#xff0c;表示屏幕分辨率&#xff09; screen.availLeft …...

铸造大型基础平板的结构应该怎样设计

设计大型基础平板的结构时&#xff0c;需要考虑以下几个方面&#xff1a; 地质条件&#xff1a;首先要了解工程所在地的地质条件&#xff0c;包括土质、地下水位、地震状况等。根据地质条件来选择合适的基础类型&#xff0c;如浅基、深基或地下连续墙等。 荷载分析&#xff1a…...

医院预约系统微信小程序APP前后端

医院预约系统具体功能介绍&#xff1a;展示信息、可以注册和登录&#xff0c; 预约&#xff08;包含各个科室的预约&#xff0c;可以预约每个各个医生&#xff09;&#xff0c;就诊引导包含预约的具体信息&#xff0c;包含就诊时间、就诊科室、就诊医生以及就诊人信息、和支付状…...

springboot数字化智慧城市管理系统源码

目录 ​系统开发环境 系统功能模块 系统特点 1、智慧城管移动端 2、案件受理 3、AI视频智识别分析 系统应用价值 1、提升案件办理效率 2、提升监管效能 3、提升行政执法水平 4、推进行政执法创新 智慧城管综合执法办案系统功能 现场移动执法 一般程序案件的网上办…...

【鸿蒙开发】第二十一章 Media媒体服务(一)

1 简介 Media Kit&#xff08;媒体服务&#xff09;提供了AVPlayer和AVRecorder用于播放、录制音视频。 在Media Kit的开发指导中&#xff0c;将介绍各种涉及音频、视频播放或录制功能场景的开发方式&#xff0c;指导开发者如何使用系统提供的音视频API实现对应功能。比如使用…...

【QT教程】QT6 Web应用实战

QT6 Web应用实战 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免费…...

(我的创作纪念日)[MySQL]数据库原理7——喵喵期末不挂科

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;大大会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…...

普乐蛙VR航天体验馆设备VR太空飞船VR元宇宙展厅

三天小长假就要来啦&#xff01;五一假期也即将到来。老板们想捉住人流量这个财富密码吗&#xff1f;那快快行动起来&#xff01;开启VR体验项目&#xff0c;假期赚翻天&#xff01;小编亲测&#xff01;&#xff01;这款设备刺激好玩&#xff0c;想必会吸引各位家长小孩、学生…...

基于torch的图像识别训练策略与常用模块

数据预处理部分&#xff1a; 数据增强&#xff1a;torchvision中transforms模块自带功能&#xff0c;比较实用数据预处理&#xff1a;torchvision中transforms也帮我们实现好了&#xff0c;直接调用即可DataLoader模块直接读取batch数据 网络模块设置&#xff1a; 加载预训练…...

微信小程序制作圆形进度条

微信小程序制作圆形进度条 1. 建立文件夹 选择一个目录建立一个文件夹&#xff0c;比如 mycircle 吧&#xff0c;另外把对应 page 的相关文件都建立出来&#xff0c;包括 js&#xff0c;json&#xff0c;wxml 和 wxcc。 2. 开启元件属性 在 mycircle.json中开启 component 属…...

大模型(Large Models):探索人工智能领域的新边界

&#x1f31f;文章目录 &#x1f31f;大模型的定义与特点&#x1f31f;模型架构&#x1f31f;大模型的训练策略&#x1f31f;大模型的优化方法&#x1f31f;大模型的应用案例 随着人工智能技术的飞速发展&#xff0c;大模型&#xff08;Large Models&#xff09;成为了引领深度…...

缓存相关知识总结

一、缓存的作用和分类 缓存可以减少数据库的访问压力&#xff0c;提升整个网站的数据访问速度&#xff0c;改善数据库的写入性能。缓存可以分为两种&#xff1a; 缓存在应用服务器上的本地缓存&#xff1a;访问速度快&#xff0c;但受应用服务器内存限制 缓存在专门的分布式缓存…...

Mapmost Alpha:开启三维城市场景创作新纪元

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…...

【大模型完全入门手册】——引言

博主作为一名大模型开发算法工程师,很希望能够将所学到的以及实践中感悟到的内容梳理成为书籍。作为先导,以专栏的形式先整理内容,后续进行不断更新完善。希望能够构建起从理论到实践的全流程体系。 助力更多的人了解大模型,接触大模型,一起感受AI的魅力! 在当今人工智能…...

在 Vue 3 中使用 Axios 发送 POST 请求

在 Vue 3 中使用 Axios 发送 POST 请求需要首先安装 Axios&#xff0c;然后在 Vue 组件或 Vuex 中使用它。以下是一个简单的安装和使用案例&#xff1a; 安装 Axios 你可以使用 npm 或 yarn 来安装 Axios&#xff1a; npm install axios # 或者 yarn add axios 使用 Axios…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)

+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...

Appium下载安装配置保姆教程(图文详解)

目录 一、Appium软件介绍 1.特点 2.工作原理 3.应用场景 二、环境准备 安装 Node.js 安装 Appium 安装 JDK 安装 Android SDK 安装Python及依赖包 三、安装教程 1.Node.js安装 1.1.下载Node 1.2.安装程序 1.3.配置npm仓储和缓存 1.4. 配置环境 1.5.测试Node.j…...

SpringCloud优势

目录 完善的微服务支持 高可用性和容错性 灵活的配置管理 强大的服务网关 分布式追踪能力 丰富的社区生态 易于与其他技术栈集成 完善的微服务支持 Spring Cloud 提供了一整套工具和组件来支持微服务架构的开发,包括服务注册与发现、负载均衡、断路器、配置管理等功能…...

免费批量Markdown转Word工具

免费批量Markdown转Word工具 一款简单易用的批量Markdown文档转换工具&#xff0c;支持将多个Markdown文件一键转换为Word文档。完全免费&#xff0c;无需安装&#xff0c;解压即用&#xff01; 官方网站 访问官方展示页面了解更多信息&#xff1a;http://mutou888.com/pro…...