Tableau api 比较一个小时';s可用性计数,包括每个类别交货日期的上一个小时和下一个小时
我有一个数据,包括产品类别、交货日期、可用性计数(此交货日期有多少产品可用)、请求时间(用户检查可用性的日期、时间-日期将是一个常量,因为它是一天的数据) 我想确定对于哪个类别和deliveryDate,AvailabilityCount在一天中下降到0,而对于其前后请求(基于时间)不是0。 我附上一份样本数据(表1)及其预期输出(表2) 样本数据为:Tableau api 比较一个小时';s可用性计数,包括每个类别交货日期的上一个小时和下一个小时,tableau-api,Tableau Api,我有一个数据,包括产品类别、交货日期、可用性计数(此交货日期有多少产品可用)、请求时间(用户检查可用性的日期、时间-日期将是一个常量,因为它是一天的数据) 我想确定对于哪个类别和deliveryDate,AvailabilityCount在一天中下降到0,而对于其前后请求(基于时间)不是0。 我附上一份样本数据(表1)及其预期输出(表2) 样本数据为: Category DeliveryDate RequestTime AvailablilityCount A 9/4/21 7
Category DeliveryDate RequestTime AvailablilityCount
A 9/4/21 7/4/21 12:00 3
A 9/4/21 7/4/21 2:00 2
A 9/4/21 7/4/21 18:00 2
B 10/4/21 7/4/21 1:00 4
B 10/4/21 7/4/21 5:00 0
B 10/4/21 7/4/21 6:00 4
A 9/4/21 7/4/21 19:00 0
A 9/4/21 7/4/21 20:00 2
C 9/4/21 7/4/21 12:00 2
C 9/4/21 7/4/21 13:00 3
C 9/4/21 7/4/21 0:00 4
C 9/4/21 7/4/21 17:00 2
C 9/4/21 7/4/21 19:00 2
C 9/4/21 7/4/21 12:00 2
A 10/4/21 7/4/21 12:00 3
A 10/4/21 7/4/21 2:00 3
D 9/4/21 7/4/21 12:00 2
D 9/4/21 7/4/21 1:00 0
D 9/4/21 7/4/21 14:00 4
D 9/4/21 7/4/21 1:00 0
E 10/4/21 7/4/21 2:00 0
E 10/4/21 7/4/21 11:00 0
E 10/4/21 7/4/21 14:00 0
F 9/4/21 7/4/21 3:00 3
F 9/4/21 7/4/21 11:00 0
F 9/4/21 7/4/21 11:30 4
F 9/4/21 7/4/21 12:00 4
解释如下:
最终输出解释
*类别交付日期计数A 21年9月4日1
对于交付日期为4月9日的A类, 在19小时,AvailabilityCount为0,而其上一个和下一个小时(18小时和20小时)不是0。
B 10/4/21 1
对于交付日期为4月10日上午5点的B类,可用性计数为0,其中在此之前和之后(凌晨1点和早上6点)的可用性计数不是0。 由于Catgory B没有交货日期在凌晨2点到凌晨4点之间的记录,因此上一次交货时间为凌晨1点。”
D 9/4/21 2
计数将为2,因为凌晨1点有2条记录的值为0
类别C将不在输出中,因为当天的可用性计数不是0。
E类将不在输出中。 说明:共有3条记录,时间分别为凌晨2点、上午11点、下午2点。 2AM的记录(AvailbilityCount=0)将不在输出中,因为2AM之前没有可比较的记录,即使2AM之后有一个AvailbilityCount=0的记录。 不会输出上午11点的记录(AvailabilityCount=0),因为之前(凌晨2点)和之后(下午2点)的可用性计数也为0。 不会输出下午2点的记录,因为下午2点后没有可比较的记录,即使之前有一条可用性计数为0的记录。”
F 9/4/21 1 F类将在输出中。 有4条记录的时间分别为凌晨3点、上午11点、上午11点30分和下午12点。 凌晨3点和中午12点的记录将不在输出中,因为没有可比较的前/后记录。 上午11点的记录将被输出,因为凌晨3点和下午12点的值不是0。
上午11:30的记录将被忽略。因此,基本上,我们将在每小时取最小值并相互比较。*您的数据中有一点不清楚,即请求时间的AM/PM。一旦你解决了这个问题,你会得到几乎相同的期望输出 另一件事是
tableau
在处理表格计算或查找函数时不是很擅长。如果您打算使用一些编程语言,如R或python,这将是一个很简单的工作
请在下面的表格中继续-
- 不用说正确处理数据中的AM/PM,因为在
D
category表或任何其他软件中都不会知道1:00实际上是1 PM
,而在其他一些行中,您是以24小时格式写入的
- 通过以下计算创建一个新的CF
INT((查找(最小值([Availability Count]),-1)0)和
(查找(最小值([Availability Count]),1)0)和
(查找(最小值([Availability Count]),0)=0)
- 在表格计算中进行以下设置
- 生成这样的视图
视图中显示的1
s是您所需的输出行。如果计算取决于记录的顺序,则您只有2个选择。使用table calcs在客户端执行计算,或使用SQL中的窗口查询,使用over()关键字在服务器端执行计算。
INT((LOOKUP(Min([Availablility Count]), -1) <> 0) AND
(LOOKUP(min([Availablility Count]), 1) <> 0) and
(LOOKUP(min([Availablility Count]), 0) = 0))