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))
相关推荐
M78佐菲4 小时前
ARM学习笔记(1)
linux·arm开发·笔记·嵌入式硬件·学习
益达丫5 小时前
Socket编程揭秘:端口、IP与进程通信的底层逻辑
linux·笔记
十二同学啊7 小时前
向量数据库:从核心原理到 RAG 与 Java 实战
数据库
蓝速科技7 小时前
会议室门牌公告通知发布选型与落地指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
chicheese8 小时前
Linux 面试速查表:从初级到高级,附高频场景答题模板
linux·运维
Linux-lucky8 小时前
32-38-Linux学习之旅之MySQL综合
linux·运维·学习·mysql·ubuntu
vortex59 小时前
常用终端模拟器全面对比:Kitty、WezTerm、Ghostty 与 Konsole
linux
一 乐10 小时前
二手交易平台|基于springboot + vue二手交易平台(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序
INGNIGHT10 小时前
270 · 电话号码的字母组合II(Trie)
linux·算法
zly350010 小时前
VMware Converter Standalone 物理机转化为虚拟机后源1硬盘变成了2个硬盘(2个硬盘文件)虚拟机无法启动。
linux·运维·服务器