1

我正在创建一个带有“按钮”的 Tableau 仪表板,这些“按钮”根据特定标准以及在过滤器中选择的内容显示为红色或绿色。过滤器只是在不同地区选择不同办公室的一种方式,在选择办公室时,按钮应根据该办公室是否达到不同指标的目标而改变颜色。

Tableau 上的导航按钮无法适应这种情况,因此我进行了解决。对于每个“按钮”,我创建了一个工作表,其中只有标签标记上的度量名称文本和颜色标记上的计算字段。然后,我将工作表添加到仪表板并添加了一个操作,以在单击“按钮”时转到相应的指标仪表板。

我遇到的问题是这些指标之一的条件着色。该指标基于库存水平。每个办公室都有多个类别的库存类型,每个类别都有一个相应的目标,每个类别中有多个“箱”。如果某个类别的箱子中的任何总库存超过该办公室该类别的目标,我希望按钮变为红色。

尝试按逻辑输入 - 对于当前过滤的数据: IF EXISTS(FOR EACH OFFICE( FOR EACH CATEGORY: [SUM(BinValue)< CategoryTarget])) THEN 'Green' ELSE 'Red'

我试图将该逻辑转换为计算字段中的 Tableau 函数并具有以下内容: SUM(INT({INCLUDE [Category]:Min([CategoryTarget])} > {INCLUDE [Category]:SUM(BinValue)}) )

当我将办公室名称和类别药丸添加到工作表以测试我的逻辑时,这种着色是正确的,但是当我移除药丸时,颜色不正确。当我尝试对所有办公室和目标的目标级别内的类别数量求和时,似乎出了点问题。

我已经尝试了以下函数的多次迭代,并且已经转了好几天:INCLUDE、EXCLUDE、FIXED、IF、SUM、INT

如果有人知道如何正确地做到这一点,甚至只是一种能够有条件地为仪表板上的按钮着色的不同方式,我将非常感激。

我的数据结构如下,以一些虚拟数据为例:

地区 子区域 办公室 类别 垃圾桶 二进制值 类别目标
西北 曼彻斯特 玩具 B123 30 50
西北 曼彻斯特 玩具 B456 40 50

因此,对于库存水平指标,选择任何 ALL/North/NorthWest/Manchester 过滤器选项应标记为红色,因为办公室中一个类别中的垃圾箱总数高于该办公室该类别的目标数量。

我已经更新了我的计算字段,但是我仍然遇到分组正确显示为真/假的问题。这就是现在的样子: MAX( {INCLUDE Category, Office:Sum(BinValue)} > {INCLUDE Category, Office:MIN(CategoryTarget)} ) True 显示为红色和 False Green(我们希望低于目标,因此绿色)。

4

3 回答 3

1

在处理示例以展示问题时,我设法使其正常工作。

我最终使用了以下逻辑: max({EXCLUDE [Bin]:SUM([Bin Value])} > [Category Target])

这意味着即使过滤器中的大多数办事处都在其库存水平目标范围内,如果有一个办事处的库存水平超过目标,“按钮”将显示为红色。

我发布了我无论如何都使用过的示例,以防将来对其他人有所帮助。链接到 Tableau Public 仪表板: https ://public.tableau.com/views/ConditionalColouring/Dashboard1?:language=en-GB&:useGuest=true&:display_count=y&:origin=viz_share_link

非常感谢你的帮助!

于 2020-12-16T16:57:54.950 回答
0

要使用逻辑条件,例如测试条件是否适用于一组数据行中的任何(或每条)记录,了解 Tableau 将布尔值“True”视为大于布尔值“False”会有所帮助。

一旦您对这个想法感到满意,您就可以使用函数 MAX()(或 MIN())来测试条件是否适用于任何记录(或分别适用于每条记录)。MAX(False, False, True, False)真实也是如此。

因此,要判断是否有任何记录的实际值低于其目标,请测试MAX([Actual Value] < [Target Value])

然后,您可以将此想法与可视化项(或必要时的 LOD 计算)上的尺寸相结合,以便在测试您的条件之前对数据记录进行适当的分组。如果您重复使用相同的条件,这种类型的计算对于定义在多个地方使用的集合非常有用。

一个技术警告,如果您的条件测试评估为 NULL,那么这些 null 值将被 MIN() 和 MAX() 忽略 - 就像其他聚合函数一样。因此,例如,您可以使用 MIN() 测试每条记录是否满足条件,如果所有非空值都为 True(因此 MIN() 报告 True),则可能会得到误导性结果。MIN(TRUE, TRUE, NULL, TRUE) = TRUE. 如果您的条件可以评估为 NULL,并且您不想忽略空值,而是将其视为与 False 相同,那么您可以使用 IFNULL() 函数为您的条件提供默认值。

例如,MIN(IFNULL([Actual Value] > [Target Value], FALSE))仅当每条记录的值高于其目标时才返回 True,将任何具有缺失值或目标的记录视为不符合条件 - 即不超过目标。当然,是否为条件设置默认值以及它应该是什么的选择取决于问题。如果您的数据没有空值,则无需考虑这种复杂情况。

于 2020-12-14T20:15:46.703 回答
0

尽管您提供的数据很少,但我认为您需要这个计算字段

IF { FIXED [Region], [Sub-Region], [Office], [Category] : SUM([Bin Value])}
> {FIXED [Region], [Sub-Region], [Office], [Category] : MIN([Category Target])} THEN 'RED' ELSE 'GREEN' END

这是基于这样的假设:对于每组region/sub-region/office/category目标值在组内的每一行中都是相同的。 因此 MAX/AVG 等都将代替MIN计算中使用的。

请参阅我在您的数据中添加了两行

在此处输入图像描述

和结果

在此处输入图像描述

于 2020-12-16T08:25:53.117 回答