【发布时间】:2021-03-26 13:29:39
【问题描述】:
我有一份将于周一至周五更新的报告,我想在多个不同的日期 [In_Date]“分箱”中显示单个指标 [生产力 %],即生成的日期维度,该维度将根据以下定义分箱我的数据:
- 昨天
- 一周至今(例如周四、周日到周三 数据将被显示等)
- 过去 7 天
- 本月至今
- 上一整月
- 最近 3 个月
- 过去 6 个月
- 过去 12 个月
我不想创建用户用来切换的参数;相反,我想要一个新维度,该维度将被删除到将遵循上述 bin 的列部分中。
目前,我使用此代码得到以下结果:
IF [In Date] = DATEADD('day', -1, TODAY()) THEN 'Yesterday'
ELSEIF [In Date] < TODAY() AND [In Date] >= DATEADD('day', -ISOWEEKDAY(TODAY()), TODAY()) then 'Week to Date'
ELSEIF [In Date] < TODAY() AND [In Date] >= DATEADD('day', -7, TODAY()) THEN 'Last 7 Days'
ELSEIF [In Date] < TODAY() AND [In Date] >= DATEADD('day', -day(TODAY())+1, TODAY()) then 'Month to Date'
ELSEIF [In Date] < DATETRUNC('month', TODAY()) AND [In Date] >= DATEADD('month', -1, DATETRUNC('month', TODAY())) then 'Last Month'
ELSEIF [In Date] < DATETRUNC('month', TODAY()) AND [In Date] >= DATEADD('month', -3, DATETRUNC('month', TODAY())) then 'Last 3 Months'
ELSEIF [In Date] < DATETRUNC('month', TODAY()) AND [In Date] >= DATEADD('month', -6, DATETRUNC('month', TODAY())) then 'Last 6 Months'
ELSEIF [In Date] < DATETRUNC('month', TODAY()) AND [In Date] >= DATEADD('month', -12, DATETRUNC('month', TODAY())) then 'Last 12 Months'
ELSE 'Older' END
重叠的日期 bin 并未捕获所有数据:“过去 12 个月”省略了之前在“过去 6 个月”中捕获的指标,等等。此外,前 4 个 bin(昨天、WTD、过去 7 天和MTD) 完全丢失。
【问题讨论】:
-
Tableau 现有的日期函数基本上已经支持所有这些。当您已经可以从日期选择器中获取所有这些功能时,为什么还需要特殊功能或新列?
-
如果您正在寻找一些重叠的指标,即具有多对多映射的计算字段,除非使用程序语言,否则这将是一个困难的部分。计算字段只能一对一映射。如果没有硬编码,一个输入(日期)不能映射到多个结果(值)。根据数学定义,一个函数只能有一个图像。但是,如果您从一个输入(日期)创建多个不重叠的字段,然后将所有这些组合在一个仪表板中,而不是在单个字段中。让我们来看吧。也许我能学到一些新东西。
-
试着想象你想在一个简单的表中创建什么。日期字段是您的一列。现在您正在尝试计算另一列,其中一个日期是昨天的日期映射有多个值,4 正好是昨天,wtd,last7 和 mtd。这只有在一行重复四次时才有可能。这种类型的关系称为多对多关系。此外,这是你想要的动态。让我们等待专家是否可以提出解决方案。
标签: tableau-api dateadd datepart