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))
相关推荐
海阔天空任鸟飞~1 小时前
Linux 权限 777
linux·运维·服务器
流星白龙1 小时前
【Redis】2.Redis重大版本
数据库·redis·junit
流星白龙1 小时前
【Redis】7.Hash表
数据库·redis·哈希算法
流星白龙2 小时前
【Redis】4.基本全局命令
数据库·redis·缓存
王八八。3 小时前
Navicat 17破解版下载安装教程 附安装激活步骤(2026 最新版)
数据库·navicat
Jelena157795857924 小时前
电商运营分析数据比价接口实战:多平台价格监控与智能决策系统
java·大数据·数据库
Kina_C4 小时前
Linux iptables 防火墙原理与实操——从四表五链到 NAT 配置
linux·运维·服务器·iptables
wdfk_prog4 小时前
嵌入式面试真题第 15 题:不可恢复异常后的通用崩溃快照、调用栈保存与离线分析架构
linux·开发语言·面试·架构
流星白龙5 小时前
【Redis】3.Redis安装与命令行客户端
数据库·redis·缓存
凌虚6 小时前
基于 PostgreSQL WAL 构建 CDC 系统:原理与工程实现
数据库·后端·postgresql