【问题标题】:Tableau - Creating Overlapping Date BinsTableau - 创建重叠的日期箱
【发布时间】:2021-03-26 13:29:39
【问题描述】:

我有一份将于周一至周五更新的报告,我想在多个不同的日期 [In_Date]“分箱”中显示单个指标 [生产力 %],即生成的日期维度,该维度将根据以下定义分箱我的数据:

  1. 昨天
  2. 一周至今(例如周四、周日到周三 数据将被显示等)
  3. 过去 7 天
  4. 本月至今
  5. 上一整月
  6. 最近 3 个月
  7. 过去 6 个月
  8. 过去 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


【解决方案1】:

这是在 Tableau 中使用 PARAMETERS 的正确案例。我很享受解决这个问题。

由于您没有提供任何数据,我通过生成从 2020 年 1 月 7 日至今的日期 (DATE_GIVEN) 并将一些随机数填充为 MEASURE_1,在 Excel 中创建了一个虚拟数据。像这样。

现在像这样继续。

步骤 1 创建一个包含 8 个输入的参数(如您的问题中所列)。我为前 6 个创建,剩下的留给你。参数应该是这样的

Step-2使用以下计算创建计算字段date bins

CASE [Parameter 1]
WHEN 1 THEN (
IF [Date_Given] = DATEADD('day', -1, TODAY()) THEN [Date_Given] end)
WHEN 2 THEN 
( IF [Date_Given] < TODAY() AND [Date_Given] >= DATEADD('day', -ISOWEEKDAY(TODAY()), TODAY()) then [Date_Given] END )
WHEN 3 then
( IF [Date_Given] < TODAY() AND [Date_Given] >= DATEADD('day', -7, TODAY()) THEN [Date_Given] END )
WHEN 4 THEN
( IF [Date_Given] < TODAY() AND [Date_Given] >= DATEADD('day', -day(TODAY())+1, TODAY()) then [Date_Given] END )
WHEN 5 THEN
( IF [Date_Given] < DATETRUNC('month', TODAY()) AND [Date_Given] >= DATEADD('month', -1, DATETRUNC('month', TODAY())) then [Date_Given] END)
WHEN 6 THEN
( IF [Date_Given] < DATETRUNC('month', TODAY()) AND [Date_Given] >= DATEADD('month', -3, DATETRUNC('month', TODAY())) then [Date_Given] END)
END

不用说,您必须对剩余的两个值进行适当的计算

第 3 步date bins 放在行架上,另外放在 FILTERS CARD 上。 (只过滤掉这个 .. 特殊值选项卡中的空值)。将measure_1 添加到所需类型。显示parameter 1,您的视图已准备就绪。查看截图(今天的系统日期 - 16-12-2020)

【讨论】:

  • 这符合我的需要。唯一的事情是我不是在寻找一个参数,而是一个新的维度来为我设置日期。我想删除原始帖子中列出的新标题的列部分中的字段。
  • 看不懂,能否请您在文本表或手写中包含您想要的输出?
  • 我已经编辑了我的原始帖子并进行了澄清。感谢您到目前为止的帮助!
  • 请同时添加您的数据结构的视图!
【解决方案2】:

关于您编辑的问题,我提出了一种解决方法(因为考虑到数学的基本规则,创建一个值输入可能导致多个值输出的计算字段对我来说似乎不合逻辑且不可能)如下。

创建 8 个不同的计算字段

Last 3 months M

IF [Date_Given] < DATETRUNC('month', TODAY()) AND [Date_Given] >= DATEADD('month', -3, DATETRUNC('month', TODAY())) then [Measure_1] END

类似地,为其他所需的 bin 创建一个单独的计算字段。此后,您可以构建问题中包含的视图/可视化项。

【讨论】:

  • 满足要求了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-18
  • 2019-06-09
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
  • 2016-01-21
相关资源
最近更新 更多