Tableau api 比较一个小时';s可用性计数,包括每个类别交货日期的上一个小时和下一个小时

Tableau api 比较一个小时';s可用性计数,包括每个类别交货日期的上一个小时和下一个小时,tableau-api,Tableau Api,我有一个数据,包括产品类别、交货日期、可用性计数(此交货日期有多少产品可用)、请求时间(用户检查可用性的日期、时间-日期将是一个常量,因为它是一天的数据) 我想确定对于哪个类别和deliveryDate,AvailabilityCount在一天中下降到0,而对于其前后请求(基于时间)不是0。 我附上一份样本数据(表1)及其预期输出(表2) 样本数据为: Category DeliveryDate RequestTime AvailablilityCount A 9/4/21 7

我有一个数据,包括产品类别、交货日期、可用性计数(此交货日期有多少产品可用)、请求时间(用户检查可用性的日期、时间-日期将是一个常量,因为它是一天的数据)

我想确定对于哪个类别和deliveryDate,AvailabilityCount在一天中下降到0,而对于其前后请求(基于时间)不是0。 我附上一份样本数据(表1)及其预期输出(表2)

样本数据为:

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))