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 天,麻烦点个赞或者收藏再走吧!谢谢同学!~~~~~~~~~~~~~~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/533065.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C# 操作PDF表单 - 创建、填写、删除PDF表单域

通常情况下&#xff0c;PDF文件是不可编辑的&#xff0c;但PDF表单提供了一些可编辑区域&#xff0c;允许用户填写和提交信息。PDF表单通常用于收集信息、反馈或进行在线申请&#xff0c;是许多行业中数据收集和交换的重要工具。 PDF表单可以包含各种类型的输入控件&#xff0…

QT:事件机制

作业&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> #include <QTime> #include<QPushButton> #include <QTextToSpeech>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAME…

头歌-机器学习 第15次实验 朴素贝叶斯分类器

第1关:条件概率 任务描述 本关任务:根据本节课所学知识完成本关所设置的选择题。 相关知识 为了完成本关任务,你需要掌握条件概率。 条件概率 朴素贝叶斯分类算法是基于贝叶斯定理与特征条件独立假设的分类方法,因此想要了解朴素贝叶斯分类算法背后的算法原理,就不得…

【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 …

(一)基于IDEA的JAVA基础13

数组遍历 遍历数组就是把数组内的数据一个个的取出来 1.我们可以用for循环&#xff0c;依次把数字类的元素取出来。 2.增强型for循环。 用第一个方法写一下&#xff0c;看一下 public class Test01 { public static void main(String[] args) { //存储一组数据{…

TQ15EG开发板教程:在MPSOC上运行ADRV9009

首先需要在github上下载两个文件&#xff0c;本例程用到的文件以及最终文件我都会放在网盘里面&#xff0c; 地址放在最后面。在github搜索hdl选择第一个&#xff0c;如下图所示 GitHub网址&#xff1a;https://github.com/analogdevicesinc/hdl/releases 点击releases选择版…

【C++题解】1005 - 已知一个圆的半径,求解该圆的面积和周长

问题&#xff1a;1005 - 已知一个圆的半径&#xff0c;求解该圆的面积和周长 类型&#xff1a;基础问题、小数运算 题目描述&#xff1a; 已知一个圆的半径&#xff0c;求解该圆的面积和周长。 输入&#xff1a; 输入只有一行&#xff0c;只有 1 个整数。 输出&#xff1a…

迭代器模式【行为模式C++】

1.简介 迭代器模式是一种行为设计模式&#xff0c; 让你能在不暴露集合&#xff08;聚合对象&#xff09;底层表现形式 &#xff08;列表、 栈和树等&#xff09; 的情况下遍历集合&#xff08;聚合对象&#xff09;中所有的元素。 迭代器的意义就是将这个行为抽离封装起来&a…

【大厂生产案例】JVM调优

写作目的 最近上线了一个需求&#xff0c;遇到了一个JVM报警的问题&#xff0c;很荣幸能遇到&#xff0c;在此分享一下整个调优的过程。 背景 我们是中台服务&#xff0c;我们的甲方就是上游不同的业务。中台原则上是业务和能力分离&#xff0c;但是不可避免的是分不开&…

数据结构学习之路--全面破解顺序表的奥秘(附C源码)

好久不见啊~大家&#xff0c;今天为大家带来的主题是&#xff1a;顺序表的实现。 目录 前言 一、线性表的定义 二、线性表的顺序结构 1 顺序表的定义 2 顺序表的基本操作 2.1 初始化函数 2.2 顺序表的销毁 2.3 顺序表的扩容 2.4 顺序表的尾插 2.5 顺序表的尾删 …

【学习】软件测试需求分析要从哪些方面入手

软件测试需求分析是软件测试过程中非常重要的一个环节&#xff0c;它是为了明确软件测试的目标、范围、资源和时间等要素&#xff0c;以确保软件测试的有效性和全面性。本文将从以下几个方面对软件测试需求分析进行详细的阐述&#xff1a; 一、软件测试目标 软件测试目标是指…

LeetCode_145(二叉树的后序遍历)

1.递归 public List<Integer> postorderTraversal(TreeNode root) {List<Integer> res new ArrayList<>();accessTree(root,res);return res;}public void accessTree(TreeNode root, List<Integer> res){if(root null){return;}accessTree(root.le…

219 基于matlab的汽车悬架(钢板弹簧,减震器)设计程序GUI

基于matlab的汽车悬架&#xff08;钢板弹簧&#xff0c;减震器&#xff09;设计程序&#xff27;&#xff35;&#xff29;。根据需求输入设计参数&#xff0c;包括前桥负荷、簧下质量、弹簧刚度、阻尼等&#xff0c;输出钢板弹簧、减震器结果。程序已调通&#xff0c;可直接运…

FHE全同态加密简介

1. 何为FHE&#xff1f; FHE (Fully homomorphic encryption)&#xff1a; 是一种隐私技术&#xff0c;支持直接对密文进行计算&#xff0c;而无需对密文先解密再计算。即&#xff0c;任何第三方或云厂商&#xff0c;都可对敏感信息的密文进行处理&#xff0c;而无需访问密文内…

基于web的音乐网站的设计与实现(论文+源码)_kaic

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了音乐网站的开发全过程。通过分析音乐网站管理的不足&#xff0c;创建了一个计算机管理音乐网站的方案。文章介绍了音乐网站的系统分析部分&#xff0c;包括可行性…

最新ChatGPT4.0工具使用教程:GPTs使用,Midjourney绘画,AI换脸,Suno-AI音乐生成大模型一站式系统使用教程

一、前言 ChatGPT3.5、GPT4.0、相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和用户进行创作交流。 然而&#xff0c;GPT-4对普通用户来说都是需要额外付费才可以…

FPGA开源项目分享——基于 DE1-SOC 的 String Art 实现

导语 今天继续康奈尔大学FPGA课程ECE 5760的典型案例分享——基于DE1-SOC的String Art实现。 &#xff08;更多其他案例请参考网站&#xff1a; Final Projects ECE 5760&#xff09; 1. 项目概述 项目网址 ECE 5760 Final Project 项目说明 String Art起源于19世纪的数学…

信息系统项目管理师0044:IT治理方法与标准(3信息系统治理—3.1 IT治理—3.1.4 IT治理方法与标准)

点击查看专栏目录 文章目录 3.1.4 IT治理方法与标准1. ITSS中1T服务治理 3.1.4 IT治理方法与标准 考虑到IT治理对组织战略目标达成的重要性&#xff0c;国内外各类机构持续研究并沉淀IT治理相关的最佳实践方法、定义相关标准&#xff0c;这里面比较典型的是我国信息技术服务标准…

6种xinput1_3.dll丢失的解决办法,并探讨xinput1_3.dll丢失的原因及其属性。

xinput1_3.dll扮演着Visual C运行时库中不可或缺的角色&#xff0c;众多电脑软件都需依赖它以确保正常运行。 当您启动软件时&#xff0c;若遇到xinput1_3.dll无法执行代码的提示&#xff0c;可能会导致软件无法如常启动或运行。本文将向您介绍6种解决方案&#xff0c;并探讨xi…

【Web开发】jquery图片放大镜效果制作变焦镜头图片放大

jquery图片放大镜效果制作变焦镜头图片放大实现 整体步骤流程&#xff1a; 1. 前端html实现 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"…