使用 LOD 计算 Tableau 中的最大布尔值
Counting max boolean in Tableau using LOD
我有一些数据如下所示,其中相同的 Id
在多行中重复,但 Victory
值不同。
Id
Victory
1
FALSE
1
FALSE
1
TRUE
2
FALSE
2
FALSE
2
TRUE
3
FALSE
3
FALSE
3
FALSE
我正在尝试计算每个 Id
的 Victory
的数量,所以如果有一行 Victory
是 TRUE
,那么它应该被认为是一个胜利.
我曾尝试使用基本的计算字段,我认为它可以解决问题。但是,它将胜利视为 TRUE
正确,但胜利 FALSE
包括 FALSE
存在的任何 Id
。
换句话说,上述数据将计数 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]) 的行为方式。它不会 return 在某些列中具有 TRUE 的记录数,或在某些列中具有 1 的记录数。它 returns [Some Column] 具有值的记录数,任何值都可以。换句话说,它 returns 具有 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 计算的情况下,您可以获得更大的灵活性 - 通常还有更好的性能。
我有一些数据如下所示,其中相同的 Id
在多行中重复,但 Victory
值不同。
Id | Victory |
---|---|
1 | FALSE |
1 | FALSE |
1 | TRUE |
2 | FALSE |
2 | FALSE |
2 | TRUE |
3 | FALSE |
3 | FALSE |
3 | FALSE |
我正在尝试计算每个 Id
的 Victory
的数量,所以如果有一行 Victory
是 TRUE
,那么它应该被认为是一个胜利.
我曾尝试使用基本的计算字段,我认为它可以解决问题。但是,它将胜利视为 TRUE
正确,但胜利 FALSE
包括 FALSE
存在的任何 Id
。
换句话说,上述数据将计数 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]) 的行为方式。它不会 return 在某些列中具有 TRUE 的记录数,或在某些列中具有 1 的记录数。它 returns [Some Column] 具有值的记录数,任何值都可以。换句话说,它 returns 具有 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 计算的情况下,您可以获得更大的灵活性 - 通常还有更好的性能。