过滤 looker 磁贴以显示数据集中最近 7 天的报告?
Filter looker tile to show last 7 reported days in dataset?
我如何过滤到数据集中最后 7 个“REPORTED”天数。
简单地过滤过去 7 天是行不通的,因为报告的天数并不总是连续的。
我不能使用最近 10 天之类的东西来捕捉它们,因为我需要将集合限制为 7。
假设我的数据集中有一个日期列,如下所示:
COMPLETED_DATE:
05/09/2022
05/06/2022
05/05/2022
05/04/2022
05/03/2022
04/20/2022
04/18/2022
04/17/2022
04/16/2022
我需要 looker 来显示与最近 7 个报告日期相关的结果,如下所示:
COMPLETED_DATE:
05/09/2022
05/06/2022
05/05/2022
05/04/2022
05/03/2022
04/20/2022
04/18/2022
这是我可以使用内置过滤器完成的事情吗?还是我需要编写一些 LookML 才能完成?
我想我可以写一个维度来做到这一点。我在网上找到了最后一次过滤的维度。我不确定如何改写它以过滤过去 7 天。
dimension: latest_date { type: yesno sql: ${created_date} = max(${created_date}) ;; }
您无需更改 LookML 即可执行此操作:
- 创建探索并按
COMPLETED_DATE
排序
- 创建一个名为
rank
的辅助 Table 计算,并将其定义为 max(row()) - row() + 1
。此列将从最近到最旧的报告编号
- 创建过滤器以仅显示
rank
小于或等于所需报告数量 的报告
根据您对报告日期的了解,您有两种方法。
1.
- 如果您知道最后一份报告至少在 X 天前 => 按“X 天前”过滤您的磁贴
- 否则 => 不按日期过滤(查询所有内容)
- 按日期排序
- 将行限制设置为 7
通过编辑查询数据以包含排名行解决了该问题。
这让我们可以根据此列过滤排名。
这是通过 looker 论坛上的一些回复解决的:
how-to-filter-on-last-7-available-dates
我的解决方案如下:
原来删除“按部分分区”解决了计数问题。
我看到一个错误说 OVER 子句需要 ORDER_BY
并且出于某种原因促使我检查如果我删除 PARTITION BY
部分它会说什么,我删除了它。无论出于何种原因,现在使用 ROW_NUMBER
和 RANK
显示的计数没有问题。
Select received_date, ROW_NUMBER() OVER(ORDER BY received_date DESC) from
(SELECT distinct CAST(received_time as DATE) received_date FROM TABLE_NAME) s
WHERE received_date <= '2022-04-12'
ORDER BY received_date DESC
和
Select received_date, RANK() OVER(ORDER BY received_date DESC) from
(SELECT distinct CAST(received_time as DATE) received_date FROM TABLE_NAME) s
WHERE received_date <= '2022-04-12'
ORDER BY received_date DESC
两者的结果是:
received_date RANK
2022-04-12 1
2022-04-11 2
2022-04-10 3
2022-04-08 4
2022-04-07 5
2022-04-06 6
2022-04-05 7
如您所见,我得到了我正在寻找的计数,因为我们在可用日期中没有 04-09 日期,计数移至下一个日期。
我如何过滤到数据集中最后 7 个“REPORTED”天数。
简单地过滤过去 7 天是行不通的,因为报告的天数并不总是连续的。 我不能使用最近 10 天之类的东西来捕捉它们,因为我需要将集合限制为 7。
假设我的数据集中有一个日期列,如下所示:
COMPLETED_DATE:
05/09/2022
05/06/2022
05/05/2022
05/04/2022
05/03/2022
04/20/2022
04/18/2022
04/17/2022
04/16/2022
我需要 looker 来显示与最近 7 个报告日期相关的结果,如下所示:
COMPLETED_DATE:
05/09/2022
05/06/2022
05/05/2022
05/04/2022
05/03/2022
04/20/2022
04/18/2022
这是我可以使用内置过滤器完成的事情吗?还是我需要编写一些 LookML 才能完成?
我想我可以写一个维度来做到这一点。我在网上找到了最后一次过滤的维度。我不确定如何改写它以过滤过去 7 天。
dimension: latest_date { type: yesno sql: ${created_date} = max(${created_date}) ;; }
您无需更改 LookML 即可执行此操作:
- 创建探索并按
COMPLETED_DATE
排序
- 创建一个名为
rank
的辅助 Table 计算,并将其定义为max(row()) - row() + 1
。此列将从最近到最旧的报告编号 - 创建过滤器以仅显示
rank
小于或等于所需报告数量 的报告
根据您对报告日期的了解,您有两种方法。
1.
- 如果您知道最后一份报告至少在 X 天前 => 按“X 天前”过滤您的磁贴
- 否则 => 不按日期过滤(查询所有内容)
- 按日期排序
- 将行限制设置为 7
通过编辑查询数据以包含排名行解决了该问题。 这让我们可以根据此列过滤排名。
这是通过 looker 论坛上的一些回复解决的:
how-to-filter-on-last-7-available-dates
我的解决方案如下:
原来删除“按部分分区”解决了计数问题。
我看到一个错误说 OVER 子句需要 ORDER_BY
并且出于某种原因促使我检查如果我删除 PARTITION BY
部分它会说什么,我删除了它。无论出于何种原因,现在使用 ROW_NUMBER
和 RANK
显示的计数没有问题。
Select received_date, ROW_NUMBER() OVER(ORDER BY received_date DESC) from
(SELECT distinct CAST(received_time as DATE) received_date FROM TABLE_NAME) s
WHERE received_date <= '2022-04-12'
ORDER BY received_date DESC
和
Select received_date, RANK() OVER(ORDER BY received_date DESC) from
(SELECT distinct CAST(received_time as DATE) received_date FROM TABLE_NAME) s
WHERE received_date <= '2022-04-12'
ORDER BY received_date DESC
两者的结果是:
received_date RANK
2022-04-12 1
2022-04-11 2
2022-04-10 3
2022-04-08 4
2022-04-07 5
2022-04-06 6
2022-04-05 7
如您所见,我得到了我正在寻找的计数,因为我们在可用日期中没有 04-09 日期,计数移至下一个日期。