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))
相关推荐
某风吾起10 分钟前
Linux 消息队列的使用方法
java·linux·运维
Elastic 中国社区官方博客18 分钟前
使用 Elasticsearch 导航检索增强生成图表
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
小金的学习笔记22 分钟前
RedisTemplate和Redisson的使用和区别
数据库·redis·缓存
新知图书37 分钟前
MySQL用户授权、收回权限与查看权限
数据库·mysql·安全
文城5211 小时前
Mysql存储过程(学习自用)
数据库·学习·mysql
沉默的煎蛋1 小时前
MyBatis 注解开发详解
java·数据库·mysql·算法·mybatis
呼啦啦啦啦啦啦啦啦1 小时前
【Redis】事务
数据库·redis·缓存
HaoHao_0101 小时前
AWS Serverless Application Repository
服务器·数据库·云计算·aws·云服务器
C语言扫地僧1 小时前
MySQL 事务及MVCC机制详解
数据库·mysql
小镇cxy1 小时前
MySQL事物,MVCC机制
数据库·mysql