如何在Data Entity中实现SysUserLog表的MAX日期聚合查询
基于SysUserLog创建Data Entity实现最新登录日期的方案
核心结论
不能通过范围(Range)实现MAX聚合逻辑,必须使用SysComputedColumn(计算列),或者先创建聚合视图再基于视图生成Data Entity。
具体实现方案
方案一:基于自定义聚合视图创建Data Entity
- 在D365FO/AX中创建自定义视图,写入如下SQL逻辑:
select UserId, Max(createdDateTime) AS LastLogin from SYSUSERLOG group by UserId
- 直接基于该视图创建Data Entity,将视图中的
UserId和LastLogin字段映射到实体字段即可,无需额外配置。
方案二:在现有SysUserLog实体中添加计算列
如果要基于原SysUserLog表的Data Entity改造:
- 在实体的数据源配置中,新增一个计算列,通过
SysComputedColumn编写聚合逻辑,示例代码如下:
SysComputedColumn::computeColumn( "SELECT MAX(createdDateTime) FROM SYSUSERLOG WHERE UserId = %1", SysComputedColumn::returnField(SysComputedColumn::tablePath(tableNum(SysUserLog)), fieldStr(SysUserLog, UserId)) )
- 将这个计算列添加到实体的字段集合中,命名为
LastLogin即可。
关于范围的说明
范围(Range)仅用于单条记录级别的数据过滤(对应SQL的WHERE子句),无法实现GROUP BY分组+聚合函数的统计逻辑,因此完全无法满足“获取每个用户最新登录日期”的需求。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

