You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Tableau中计算今日与昨日患者数百分比差异及公式报错求助

解决Tableau中计算当日与昨日患者数百分比差异的问题

问题根源

你使用的公式报错,核心问题有两点:

  • FIXED 级别表达式(LOD)中,MAX(DATEPART('day', [Date])) 的计算上下文冲突:FIXED : 是对全数据集做计算,而MAX(DATEPART(...)) 也是全数据集的聚合操作,两者嵌套会导致逻辑混乱,触发Tableau的计算规则报错。
  • 用DATEPART('day', [Date]) 提取天的数字,仅适配单月数据,后续若数据跨月(比如5月1日和4月1日),会出现天数字重复,导致统计错误。

正确实现方法

1. 先计算每日患者数

创建计算字段每日患者数:

COUNTD([Patient ID])

将该字段拖入视图,配合[Date] 维度,即可得到每天的患者数量。

2. 获取昨日患者数

创建计算字段昨日患者数,用LOOKUP 函数提取前一天的患者数据:

LOOKUP([每日患者数], -1)

注意:使用前需确保[Date] 为连续日期,且视图已按日期排序,否则LOOKUP 无法准确定位昨日数据。

3. 计算百分比差异

创建计算字段日环比差异(%):

IF [昨日患者数] != 0 THEN
    ([每日患者数] - [昨日患者数]) / [昨日患者数] * 100
ELSE
    NULL  // 规避除以0的报错
END

若需显示为百分比格式,右键点击该字段→「设置格式」→「数字」→「百分比」即可。

替代方案:不依赖视图排序的LOD写法

如果不想受视图日期排序限制,可以用FIXED LOD结合日期函数定位昨日:

// 计算当日患者数
{FIXED [Date] : COUNTD([Patient ID])}

// 计算昨日患者数
{FIXED DATEADD('day', -1, [Date]) : COUNTD([Patient ID])}

再用这两个字段按照步骤3的逻辑计算百分比差异即可。

原公式错误解析

原公式({FIXED : COUNTD(IF DATEPART('day', [Date]) = MAX(DATEPART('day', [Date])) THEN [Patient ID] END)}) 存在逻辑缺陷:

  • Tableau不允许在LOD的逐行判断中直接引用全数据集的聚合值(MAX(DATEPART(...))),这是报错的直接原因。
  • 即便不报错,用天的数字筛选“最新日期”也存在跨月风险,正确的做法应该是用[Date] = MAX([Date]) 来定位数据集内的最新日期。

内容的提问来源于stack exchange,提问作者Geethika Gayatri Padala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 13:27:17