问题描述
我有一些如下所示的数据,其中相同的 Id
在多行中重复,但不同的 Victory
值。
我正在尝试计算每个 Victory
的 Id
数量,所以如果有一行 Victory
是 TRUE
,那么它应该被视为胜利。
我尝试使用一个基本的计算字段,我认为这可以解决问题。但是,它会将胜利视为 TRUE
正确,但胜利 FALSE
包括任何存在 Id
的 FALSE
。
换句话说,使用以下计算字段,上述数据将计算 3x FALSE
和 2x TRUE
:
COUNT ( { FIXED [Id]: MAX([Victory]) } )
这是我得到的可视化,我希望 FALSE
的计数仅为 1,但为 3。
我尝试了许多变体,但似乎无法获得理想的结果。
我使用的是 Tableau 2020.4。
编辑
我遇到了两种不同的问题解决方案,我附上了下面的屏幕截图。请注意,Victory
替换为 WIN
,Id
替换为 Row Id
,但示例应该很清楚。
解决方案 1
解决方案 2
解决方法
首先,请确保您了解 COUNT([Some Column]) 的行为方式。它不返回某些列中为 TRUE 的记录数,或某些列中为 1 的记录数。它返回 [Some Column] 具有值的记录数,任何值都可以。换句话说,它返回具有 NON-NULL 值的记录数。
这就是您获得高于预期结果的原因。您希望 COUNT 以某种方式只计算 Victory 具有特定值的记录,在您的情况下为 TRUE。就 COUNT() 而言,TRUE 和 FALSE 是等效的。 COUNT() 只关心是否有值 - 而不是 null。
考虑到重要的评论,我建议不要在晚上使用 COUNT() 来处理这种情况。表达式 SUM(INT([Victory]))
将告诉您有多少行字段 Victory 的值为 True。该表达式有效,因为类型转换函数 INT() 将 TRUE 转换为 1,将 FALSE 转换为 0。
如果需要,您可以将该表达式包装在 LOD 计算中,或者将计算的字段度量定义为 INT([Victory])
。将该字段放在某个架子上,聚合函数默认为 SUM(),并将 ID 放在另一个架子上,您就会得到答案。
仅在您确实需要时才使用 LOD。无需使用 LOD 计算即可获得更大的灵活性 - 通常也具有更好的性能。