求和后的非重复计数

Distinct Count after Sum

所以我想在聚合后进行计数。基本上,我希望能够将库存计数加总和,然后计算每个员工的库存计数非零的次数。

因此对于此数据,Jack/Jimmy 的计数为 1,Sam 的计数为 2,Steve 的计数为 0。我可以在 SQL后端,但我也希望他们能够使用日期参数。因此,如果他们将日期仅更改为 2017 年 1 月 1 日,Sam 的计数将为 1,而其他所有人的计数将为 0。非常感谢任何帮助!

数据

Emp          Item          Inventory     Date
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

日期 >= '1/1/17':

Emp  NonZeroCount
Sam      2  
Jack     1
Jimmy    1
Steve    0

日期 = '1/1/17':

Emp  NonZeroCount
Sam      1  
Jack     0
Jimmy    0
Steve    0

SQL 我设想它会取代

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

这是在 Tableau 中创建集合的好案例。

Select 左侧数据窗格中的项目字段,然后右键单击以基于该字段创建一个集合。将其命名为 Bad Items,并在 Condition 选项卡上使用以下公式对其进行定义,假设您已经定义了一个名为 [DateParam] 且类型为 Date.

的参数
sum(if [Date] >= [DateParam] then [Inventory] end) <> 0

然后,您可以在计算中使用过滤器架、行架上的集合,或根据需要与其他集合组合。

P.S。我使用别名在 table 中显示文本 "Bad Items" 而不是 "In",为 Emp 字段设置手动默认排序顺序(以防您试图准确重现)