首页 > 解决方案 > 表格中的计算字段以查找第一行是成功还是失败

问题描述

我有以下数据(来自表),其中包含 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 

标签: sql-server

解决方案


为此,您可以在计算字段中使用LOD(详细级别)表达式。一开始,LOD 可能会让人难以理解,但一旦使用了几次,它们就会变得非常方便。

  1. 在维度下创建一个名为“First Rejection of Day”的新计算字段。这将具有用户当天第一次拒绝的时间戳,如果没有拒绝,则为 null。使用以下代码:

{ FIXED [UserId], DATE([TransactionDate]) : MIN(
    IF [StatusDesc] = "Rejected" THEN
      [TransactionDate]
    END
  )
}

  1. 创建另一个名为“Has Prior Rejection”的计算字段。使用以下代码:

ISNULL([First Rejection of Day]) = FALSE AND [First Rejection of Day] <= [TransactionDate]

  1. 将 Has Prior Rejection 拖动到过滤器,然后选择“False”。这将过滤掉所有先前被拒绝的记录。

Tableau 中的屏幕截图


推荐阅读