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))
相关推荐
致奋斗的我们9 分钟前
RHCE的学习(7)
linux·服务器·网络·学习·redhat·rhce·rhcsa
幽兰的天空35 分钟前
python实现excel数据导入数据库
数据库
昨天今天明天好多天1 小时前
【Linux】ClickHouse 部署
linux·服务器·clickhouse
taolichao301 小时前
架设一台NFS服务器,按照要求配置
linux·运维·服务器
程序员yt1 小时前
2025秋招八股文--服务器篇
linux·运维·服务器·c++·后端·面试
2301_810730101 小时前
RHCSA基础命令整理1
linux·运维·服务器
Chris-zz1 小时前
Linux:磁盘深潜:探索文件系统、连接之道与库的奥秘
linux·网络·c++·1024程序员节
TeYiToKu1 小时前
笔记整理—linux驱动开发部分(1)驱动梗概
linux·c语言·arm开发·驱动开发·嵌入式硬件
lishing61 小时前
Linux驱动开发(2):第一个内核模块
linux·运维·驱动开发
从后端到QT2 小时前
ubuntu编译ffmpeg
linux·运维·ubuntu