sql-server - 表格中的计算字段以查找第一行是成功还是失败
问题描述
我有以下数据(来自表),其中包含 TransactionDate、UserID 和 StatusDesc 字段。目标是我想显示用户 ID,其中用户 ID 没有在成功登录的同一天之前发生登录失败(由 statusDesc 列表示 - '拒绝')(成功登录由 statusDesc 列表示 - '成功')。
实际数据
TransactionDate UserId StatusDesc
2018-12-02 00:00:01.957 Cesarmartinez1795@gmail.com Rejected
2018-12-02 00:00:14.907 Cesarmartinez1795@gmail.com Success
2018-13-02 00:00:22.390 Cesarmartinez1795@gmail.com Success
2018-13-02 00:00:28.610 Cesarmartinez1795@gmail.com Rejected
2018-14-02 00:00:22.390 ssunlife@gmail.com Success
2018-14-02 00:00:28.610 ssunlife@gmail.com Rejected
预期结果
TransactionDate UserId StatusDesc
2018-13-02 00:00:22.390 Cesarmartinez1795@gmail.com Success
2018-14-02 00:00:22.390 ssunlife@gmail.com Success
解决方案
为此,您可以在计算字段中使用LOD(详细级别)表达式。一开始,LOD 可能会让人难以理解,但一旦使用了几次,它们就会变得非常方便。
- 在维度下创建一个名为“First Rejection of Day”的新计算字段。这将具有用户当天第一次拒绝的时间戳,如果没有拒绝,则为 null。使用以下代码:
{ FIXED [UserId], DATE([TransactionDate]) : MIN(
IF [StatusDesc] = "Rejected" THEN
[TransactionDate]
END
)
}
- 创建另一个名为“Has Prior Rejection”的计算字段。使用以下代码:
ISNULL([First Rejection of Day]) = FALSE AND [First Rejection of Day] <= [TransactionDate]
- 将 Has Prior Rejection 拖动到过滤器,然后选择“False”。这将过滤掉所有先前被拒绝的记录。
推荐阅读
- c++ - 寻找最小的下一个更大的元素
- angular - “OperatorFunction”类型上不存在属性“catch”
' - c# - 如果它们附加到不同的对象并且在不同的场景中,如何将分数传递给记分牌c#
- python - Python,纸牌游戏,AttributeError
- node.js - 无法访问预保存中间件 mongoose 中的架构属性
- excel - Excel筛选操作
- oop - 暴露流或使用观察者模式
- public-key-encryption - 如何从给定的公钥在 gpg 中创建公钥文件
- docker - 如何在 docker-compose 文件中获取和设置随机服务端口作为 env var?
- javascript - TypeError:参数 1 对 URL.createObjectURL 的任何 1 参数重载都无效