【问题标题】:Counting max boolean in Tableau using LOD使用 LOD 在 Tableau 中计算最大布尔值
【发布时间】:2021-05-13 16:06:29
【问题描述】:

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

Id Victory
1 FALSE
1 FALSE
1 TRUE
2 FALSE
2 FALSE
2 TRUE
3 FALSE
3 FALSE
3 FALSE

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

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

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

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

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

我尝试了很多变化,但似乎无法获得预期的结果。

我正在使用 Tableau 2020.4。

编辑

我遇到了两种不同的解决方案来解决我的问题,我附上了下面的屏幕截图。注意VictoryWIN替换,IdRow Id替换,但是例子应该清楚。

解决方案 1

解决方案 2

【问题讨论】:

    标签: aggregate tableau-api level-of-detail


    【解决方案1】:

    首先,确保您了解 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 计算,您就拥有更大的灵活性,而且性能通常更好。

    【讨论】:

    • 我明白了,这清除了它。那么你将如何计算FALSE 呢?我最终遇到了一个解决方案,您将 { FIXED [Id] : MAX([Victory]) } 作为离散的列放在列中。 COUNTD([Id]) 在行中。但我很好奇你会如何使用SUM()
    • 您可以将任何您喜欢的布尔表达式作为 INT() 的参数。因此,要计算 False 为 Victory 的行数,只需使用 SUM(INT(NOT [Victory]))。您可以使用任何布尔表达式。它不必只是一个字段引用。例如,要计算有 4 个或更多孩子的人,只需使用 SUM(INT([Number of Kids] >= 4))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多