10. DAX 时间函数之实战

在实际代码过程中,总会遇到各种需求,往往需要一个或者多个函数一起实现目的。在下面的过程中,我尽量使用简洁而优美的代码,来实现各个目的。

首先准备数据,使用 1. DAX 时间函数--生成日期表 中的 GENERATE CALENDAR 生成一个日期表,从 2017 年 1 月 1 日到 2025 年 12 月 31 日,如下图

再创建一个表"测试数据",其中有Date域,为日期格式。

1. 取一段时间中的最早、最晚日期

关于取最早时间,此处给三种写法,大家可以看看有什么不一样

复制代码
最早日期-MIN = MIN('测试数据'[Date]) 
最早日期-FIRSTDATE1 = FIRSTDATE('测试数据'[Date]) 
最早日期-FIRSTDATE2 = FIRSTDATE('测试数据'[Date].[Date]) 

大家可以注意到,第一、二种写法可以随着切片器的变化而变化,但是第三种写法则是固定的结果,这是因为取'测试数据'[Date].[Date]时候,已经是提前将数据取出来了,不受切片器的变化而变化了,所以请大家注意。

打算如果是在此处看到 MIN 和 FIRSTDATE 可以达到一样的效果,但是在 CALCULATE 语句中FIRSTDATE 会发生变化,详情请看 6. DAX 时间函数-- DATE 日期--FIRSTDATE \LASTDATE\DATESMTD\DATESQTD\DATESYTD_dax 计算上月月份天

取最晚时间,可用代码

复制代码
最早日期-MAX= MAX('测试数据'[Date]) 
最早日期-LASTDATE = LASTDATE('测试数据'[Date]) 

2.两个日期中的自然日计数

如果想实现两个日期中的自然日计数,可以使用以下代码,两种方式效果相同

复制代码
自然日数量 = COUNTROWS(FILTER('日期表',AND('日期表'[Date]>=[最早日期],'日期表'[Date]<=[最晚日期])) )
自然日数量 =COUNTROWS(FILTER(CALENDAR([最早日期], [最晚日期]))

3.两个日期中的工作日计数

如果想实现两个日期中的工作日计数,可以使用以下代码,两种方式效果相同

复制代码
工作日数量 = COUNTROWS(FILTER('日期表',AND(AND('日期表'[Date].[Date]>=[最早日期],'日期表'[Date].[Date]<=[最晚日期]),'日期表'[星期编号]<6)))
工作日数量 = 
    COUNTROWS(
        FILTER(
            CALENDAR([最早日期], [最晚日期]),
            WEEKDAY([Date], 2) < 6  的值
        )
    )

-- 这里使用WEEKDAY函数,2表示周一是工作周的第一天,返回1到5

4.两个日期中的周一的计数

复制代码
星期一数量 = COUNTROWS(FILTER('日期表',WEEKDAY('日期表'[Date])=1))
相关推荐
m0_613856298 分钟前
mysql如何利用事务隔离级别解决特定业务冲突_mysql隔离方案选型
jvm·数据库·python
Adios79418 分钟前
VPR:Pitts50K和Norland数据集下载
数据库
东风破13722 分钟前
DM用户权限、表、约束等对象的基本操作,SQL日志的开启介绍
数据库·sql·dm达梦数据库
j_xxx404_28 分钟前
Linux:静态链接与动态链接深度解析
linux·运维·服务器·c++·人工智能
收获不止数据库32 分钟前
达梦9发布会归来:AI 时代,我们需要一款什么样的数据库?
数据库·人工智能·ai·语言模型·数据分析
小宇的天下1 小时前
Virtuoso GUI 界面中的关键模块定义
数据库
bqq198610261 小时前
MySQL 5.7 与 MySQL 8.0 的主要区别
数据库·mysql
_只道当时是寻常1 小时前
【Codex】Ubuntu 安装 Codex CLI 并解决 Clash 代理与账号认证问题
linux·ubuntu·chatgpt
Elastic 中国社区官方博客2 小时前
Elastic-caveman : 在不损失 Elastic 最佳效果的情况下,将 AI 响应 tokens 减少64%
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·全文检索
互联网推荐官2 小时前
上海软件定制开发全流程拆解:需求分析、技术选型与交付管理的工程实践
大数据·数据库·需求分析