Tableau api 和后不重复计数

Tableau api 和后不重复计数,tableau-api,Tableau Api,因此,我希望在聚合后进行计数。基本上,我希望能够用一个总和来计算库存数量,然后计算每个员工拥有非零库存数量的次数 因此,对于这个数据,杰克/吉米的计数为1,山姆的计数为2,史蒂夫的计数为0。我可以在后端的SQL中轻松地实现这一点,但我也希望他们能够使用日期参数。因此,如果他们将日期改为1/1/17,山姆的计数将为1,其他人的计数将为0。任何帮助都将不胜感激 数据 日期>='1/1/17': 日期为'1/1/17': 我设想它将取代SQL 这是一个在Tableau中创建集合的好例子 在左侧的数据窗

因此,我希望在聚合后进行计数。基本上,我希望能够用一个总和来计算库存数量,然后计算每个员工拥有非零库存数量的次数

因此,对于这个数据,杰克/吉米的计数为1,山姆的计数为2,史蒂夫的计数为0。我可以在后端的SQL中轻松地实现这一点,但我也希望他们能够使用日期参数。因此,如果他们将日期改为1/1/17,山姆的计数将为1,其他人的计数将为0。任何帮助都将不胜感激

数据 日期>='1/1/17': 日期为'1/1/17': 我设想它将取代SQL
这是一个在Tableau中创建集合的好例子

在左侧的数据窗格中选择项目字段,然后右键单击以基于该字段创建一个集合。将其命名为Bad Items,并使用“条件”选项卡上的以下公式对其进行定义,该公式假定您定义了一个名为[DateParam]的日期类型参数

sum(if [Date] >= [DateParam] then [Inventory] end) <> 0
然后,可以在计算中使用过滤器工具架、行工具架上的集合,或根据需要与其他集合组合


注意:我使用了一个别名来显示文本坏项,而不是在表中,为Emp字段设置一个手动默认排序顺序,以防您试图准确地复制此项

示例中的数字似乎与您在说明中声明的金额相加。或者至少,我还不清楚问题的描述。如果你认为SQL很简单,那么试着展示一个你想要的SQL,然后我就可以充分理解你的目标,从而展示与之等价的Tableau。它确实符合我所希望的逻辑,但问题是我需要他们能够在Tableau中调整@DateParam,并为2017年1月1日和2017年2月1日提供不同的结果SQL有助于解释您想要什么,但您能否在标题为“日期设置为2017年1月1日”的部分中验证您的示例结果:?对于没有日期设置的情况,我可以使用Tableau重现结果。由于您的查询中有一个>=@DateParam而不是>,我想知道您的意思是将日期设置为2017年1月2日吗?否则,它似乎与没有日期的情况相同。如果你这样做,我得到的结果是杰克和吉米的结果是1,而不是0,因为他们都买了饼干。问题陈述错了吗?只是不想解决错误的问题很抱歉,设置为1/1/17的日期比我在SQL示例中设置的日期早。所以我的意思是将日期设置为1/1/17,在本例中,日期>='1/1/17'。希望这能回答这个问题?我想是的,但是SQL在两个测试用例中不会给出相同的结果吗?因为测试集中的每个日期都>=1/1/2017?我怀疑你的第二套预期结果是错误的。要么是这样,要么我还是不知道你想做什么。
Emp  NonZeroCount
Sam      2  
Jack     1
Jimmy    1
Steve    0
Emp  NonZeroCount
Sam      1  
Jack     0
Jimmy    0
Steve    0
Create Table #Test(
Empl varchar(50),
Item Varchar (50),
Inventory int,
Date Date
)

Declare @DateParam Date 
Set @DateParam = '1/1/17'

Insert into #Test (Empl,Item,Inventory,Date)
Values
('Sam','Crackers',1,'1/1/2017'),
('Jack','Crackers',1,'1/1/2017'),
('Jack','Crackers',-1,'2/1/2017'),
('Jimmy','Crackers',-2,'1/1/2017'),
('Sam','Apples',1,'1/1/2017'),
('Steve','Apples',-1,'1/1/2017'),
('Sam','Cheese',1,'1/1/2017');

Select
Item,Sum(Inventory) as Total
into #badItems
from #Test
Where Date >= @DateParam
group by Item
having Sum(Inventory) <> 0

Select
T.Empl,Count(Distinct BI.Item)
From #Test T
Inner Join #badItems BI on BI.Item = T.Item
group by T.Empl
sum(if [Date] >= [DateParam] then [Inventory] end) <> 0