PowerBI/DAX之理解FIRSTDATE和LASTDATE

FIRSTDATE 和 LASTDATE 函数可以用来获取第一个日期和最后一个日期,并以表的形式返回,在用作CALCULATE函数的内部筛选器参数时可以有效简化代码的书写。


语法和作用

语法:

FIRSTDATE ( <Dates> )
LASTDATE ( <Dates> )

作用:返回参数所指定的日期字段在当前计值环境中的可见数据的第一个日期或最后一个日期,并以表的形式返回,结果表是一个单行单列的表。

注意:

1、FIRSTDATE 和 LASTDATE 函数的参数必须是日期类型的字段或单列表。

2、日期参数可以接受三种类型的输入,分别为:对日期列的引用、具有单个日期列的表、以及定义单个日期列表的布尔表达式。

3、这两个函数的参数如果是对日期列的引用,那么会触发行上下文转换。


辅助理解的例子

1、FIRSTDATE函数返回的是参数所指定的日期字段在当前计值环境中的可见数据的第一个日期,如下图所示:

2、LASTDATE函数返回的是参数所指定的日期字段在当前计值环境中的可见数据的最后一个日期,如下图所示:

3、如果用代码来表示的话,那么FIRSTDATE函数与LASTDATE函数的等价写法如下:

  • FIRSTDATE函数的等价写法:
FIRSTDATE('Table'[Date])

等价于:

VAR DateParamTable = CALCULATETABLE(DISTINCT('Table'[Date]))	// 参数所指定的日期单列表
VAR MinDate = MINX(DateParamTable,'Table'[Date])				// 找出第一个日期
RETURN
TREATAS({MinDate},'Table'[Date])								// 最后返回的是具有数据沿袭的单行单列的表
  • LASTDATE函数的等价写法:
LASTDATE('Table'[Date])

等价于:

VAR DateParamTable = CALCULATETABLE(DISTINCT('Table'[Date]))	// 参数所指定的日期单列表
VAR MaxDate = MAXX(DateParamTable,'Table'[Date])				// 找出最后一个日期
RETURN
TREATAS({MaxDate},'Table'[Date])								// 最后返回的是具有数据沿袭的单行单列的表

4、这两个函数的第一参数可以接受三种输入,其中一种就是直接引用日期列,而不需要借助任何表函数,因为它等价于:

CALCULATETABLE ( DISTINCT ( Table[ColumnName] ) )

因此,如果第一参数是直接引用日期列,那么还会触发行上下文转换,如下图所示:

由于行上下文转换,使得日期字段的可见数据只有当前行的单个日期,因此无论是返回第一个还是最后一个,都是当前行本身的日期。

5、除了直接引用日期列,这两个函数的第一参数还可以接受具有单个日期列的表、以及定义单个日期列表的布尔表达式,如下图所示:

使用这两种写法时可能会出现红色波浪线的警告,这可能是智能感知功能出了Bug,语法是没问题的,忽略即可。另外,定义单列表的布尔表达式其实也是一个语法糖,它跟CALCULATE函数的布尔筛选是一样的,完整写法如下:

FIRSTDATE('Table'[Date]>dt"2025-1-2")

等价于:

FIRSTDATE(FILTER(ALL('Table'[Date]),'Table'[Date]>dt"2025-1-2"))

需要注意的是,当第一参数不是直接引用日期列时,是不会触发行上下文转换的,如下图所示:

由于没有发生行上下文转换,因此第一参数的VALUES函数返回了全部日期,所以每一行都返回了全部日期中的第一个。

6、由于 FIRSTDATE 和 LASTDATE 函数返回的是表,因此可以直接用作CALCULATE函数的内部筛选器,从而减少代码的书写,比如以下表达式:

CALCULATE (
    SUM ( 'Table'[Sales] ),
    LASTDATE ( 'Table'[Date] )
)

如果使用MAX函数来代替LASTDATE函数的话,那么代码量会有所增加,具体如下:

CALCULATE (
    SUM ( 'Table'[Sales] ),
    FILTER ( ALL ( 'Table'[Date] ), 'Table'[Date] = MAX ( 'Table'[Date] ) )
)

总结

FIRSTDATE 和 LASTDATE函数的行为类似于MIN/MAX函数,但由于返回的是表并且可以触发行上下文转换,所以在部分场景中能够简化代码书写量,建议掌握。

资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 四路20秒声光显示计分抢答器Multisim14仿真源文件+设计文档资料摘要 数字抢答器由主体电路与扩展电路组成。优先编码电路、锁存器、译码电路将参赛队的输入信号在显示器上输出;用控制电路主持人开关启动报警电路,以上两部分组成主体电路。通过定时电路译码电路将秒脉冲产生的信号在显示器上输出实现计时功能,构成扩展电路。经过布线、焊接、调试等工作后数字抢答器成形。关键字:开关阵列电路;触发锁存电路;解锁电路;编码电路;显示电路 一、设计目的 本设计是利用已学过的数电知识,设计的4人抢答器。(1)重温自己已学过的数电知识;(2)掌握数字集成电路的设计方法原理;(3)通过完成该设计任务掌握实际问题的逻辑分析,学会对实际问题进行逻辑状态分配、化简;(4)掌握数字电路各部分电路与总体电路的设计、调试、模拟仿真方法。 二、整体设计 (一)设计任务与要求: 抢答器同时供4名选手或4个代表队比赛,分别用4个按钮S0 ~ S3表示。 设置一个系统清除抢答控制开关S,该开关由主持人控制。 抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在LED数码管上显示,同时扬声器发出报警声响提示。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。 参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号抢答的时间,并保持到主持人将系统清除为止。 如果定时时间已到,无人抢答,本次抢答无效。 (二)设计原理与参考电路 抢答器的组成框图如下图所示。它主要由开关阵列电路、触发锁存电路、解锁电路、编码电路显示电路等几部分组成。
### Python数据分析结果与PowerBI集成 #### 使用Python进行数据分析准备 为了将Python的数据分析结果与PowerBI集成,通常先利用Python的强大数据处理能力完成复杂的数据清洗、转换以及初步分析工作。这一步骤中常用的库有`pandas``numpy`,它们能够高效地操作结构化数据集[^2]。 ```python import pandas as pd import numpy as np # 假设有一个CSV文件存储着销售记录 data = pd.read_csv('sales_data.csv') # 清洗数据:去除缺失值 cleaned_data = data.dropna() # 转换日期列以便后续时间序列分析 cleaned_data['date'] = pd.to_datetime(cleaned_data['date']) # 计算每日销售额总作为新的特征 daily_sales = cleaned_data.groupby(['date']).agg({'amount': 'sum'}).reset_index() ``` #### 将Python处理后的数据导出至适合PowerBI使用的格式 一旦完成了必要的预处理步骤,在大多数情况下会把最终的结果保存成`.csv`或Excel表格形式,因为这两种格式可以直接被PowerBI所识别支持导入。对于更大规模的数据集,则可能考虑使用数据库连接的方式共享给PowerBI。 ```python # 导出为CSV文件供PowerBI读取 daily_sales.to_csv('processed_daily_sales.csv', index=False) # 或者如果要写入SQL Server这样的关系型数据库 from sqlalchemy import create_engine engine = create_engine('mssql+pyodbc://username:password@server/database?driver=ODBC Driver 17 for SQL Server') daily_sales.to_sql(name='DailySalesSummary', con=engine, if_exists='replace', index=False) ``` #### 在PowerBI Desktop内接入来自Python的数据源 打开PowerBI Desktop应用后,可以通过“获取数据”选项卡下的多种途径加载由Python生成的数据资源: - **直接从文件**:当选择了本地磁盘上的CSV/Excel文档时,只需按照向导提示指定路径即可; - **通过ODBC/JDBC驱动程序访问外部数据库**:适用于那些已经存放在远程服务器端的关系型数据库表单; 此外,还可以借助于Power Query Editor中的M语言脚本进一步定制数据提取逻辑,比如动态调用Python API接口来实时拉取最新更新的内容。 #### 利用DAX表达式增强模型关联度 为了让两个平台之间建立紧密联系,可以在PowerBI内部运用Data Analysis Expressions (DAX),这是一种专门针对多维数据集查询设计的语言,用来定义计算字段或者创建复杂的业务规则,从而更好地反映基于Python得出的关键指标变化情况。 例如,假设想要在报表里显示过去一周内的平均日销量增长百分比,那么就可以这样设置一个新的度量项: ```dax Average Daily Sales Growth % = VAR LastWeekAvg = AVERAGE(DailySalesSummary[Amount]) RETURN DIVIDE(LASTDATE(DailySalesSummary[date]) - FirstDate(DailySalesSummary[date]),LastWeekAvg ,0)*100 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PowerBI | 夕枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值