使用 LOD

问题描述

我有一些如下所示的数据,其中相同的 Id 在多行中重复,但不同的 Victory 值。

ID 胜利
1 错误
1 错误
1 正确
2 错误
2 错误
2 正确
3 错误
3 错误
3 错误

我正在尝试计算每个 VictoryId 数量,所以如果有一行 VictoryTRUE,那么它应该被视为胜利。

我尝试使用一个基本的计算字段,我认为这可以解决问题。但是,它会将胜利视为 TRUE 正确,但胜利 FALSE 包括任何存在 IdFALSE

换句话说,使用以下计算字段,上述数据将计算 3x FALSE 和 2x TRUE

COUNT ( { FIXED [Id]: MAX([Victory]) } )

这是我得到的可视化,我希望 FALSE 的计数仅为 1,但为 3。

Tableau visualization

我尝试了许多变体,但似乎无法获得理想的结果。

我使用的是 Tableau 2020.4。

编辑

我遇到了两种不同的问题解决方案,我附上了下面的屏幕截图。请注意,Victory 替换为 WINId 替换为 Row Id,但示例应该很清楚。

解决方案 1

Solution 1

解决方案 2

Solution 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 计算即可获得更大的灵活性 - 通常也具有更好的性能。