Tableau api Tableau-创建重叠的日期箱

Tableau api Tableau-创建重叠的日期箱,tableau-api,dateadd,datepart,Tableau Api,Dateadd,Datepart,我有一份将在周一至周五更新的报告,并希望在几个不同的日期[输入日期]“存储单元”中显示一个单一指标[生产率%”,即根据以下定义存储数据的生成日期维度: 昨天 本周迄今(如周四、周日至周三) 将显示数据等。) 最后7天 当月至今 最后一个月 过去3个月 过去6个月 过去12个月 我不想创建一个用户用来切换的参数;相反,我想要一个新的维度,该维度将被放置在列部分中,该部分将遵循上面列出的容器 下面是我想要实现的一个例子: 目前,我使用此代码得到以下结果: 如果[In Date]=DATEADD('

我有一份将在周一至周五更新的报告,并希望在几个不同的日期[输入日期]“存储单元”中显示一个单一指标[生产率%”,即根据以下定义存储数据的生成日期维度:

  • 昨天
  • 本周迄今(如周四、周日至周三) 将显示数据等。)
  • 最后7天
  • 当月至今
  • 最后一个月
  • 过去3个月
  • 过去6个月
  • 过去12个月
  • 我不想创建一个用户用来切换的参数;相反,我想要一个新的维度,该维度将被放置在列部分中,该部分将遵循上面列出的容器

    下面是我想要实现的一个例子:

    目前,我使用此代码得到以下结果:

    如果[In Date]=DATEADD('day',-1,TODAY()),则为'Dayed'

    ELSEIF[In Date]=DATEADD('day'),-ISOWEEKDAY(TODAY()),TODAY())然后是'Week-to-Date'

    ELSEIF[In Date]=DATEADD('day',-7,TODAY())然后是'Last 7 Days'

    ELSEIF[In Date]=DATEADD('day',-day(TODAY())+1,TODAY())然后是'Month-to-Date'

    ELSEIF[In Date]=DATEADD('month',-1,DATETRUNC('month',TODAY())然后是'Last month'

    ELSEIF[In Date]=DATEADD('month',-3,DATETRUNC('month',TODAY())然后是“最近3个月”

    ELSEIF[In Date]=DATEADD('month',-6,DATETRUNC('month',TODAY())然后是“最近6个月”

    ELSEIF[In Date]=DATEADD('month',-12,DATETRUNC('month',TODAY())然后是“最近12个月”
    其他“旧”端


    重叠的日期箱没有捕获所有数据:“过去12个月”忽略了以前在“过去6个月”中捕获的指标等。此外,前4个箱(昨天、WTD、最后7天和MTD)完全丢失。

    这是在表中使用参数的适当情况。我喜欢解决这个问题

    由于您没有提供任何数据,我在excel中创建了一个虚拟数据,生成了从2020年7月1日起到日期(
    date\u GIVEN
    )的日期,并对这些日期填入一些随机数,如
    MEASURE\u 1
    。像这样的

    现在就这样进行

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

    步骤2使用以下计算创建一个计算字段
    日期栏

    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
    
    案例[参数1]
    当我(
    如果[Date_Given]=DATEADD('day',-1,TODAY()),则[Date_Given]结束)
    那么什么时候2
    (如果[Date_Given]=DATEADD('day',-ISOWEEKDAY(TODAY()),TODAY()),则[Date_Given]结束)
    那么什么时候3点
    (如果[Date_Given]=DATEADD('day',-7,TODAY()),则[Date_Given]结束)
    那是什么时候
    (如果[Date_Given]=DATEADD('day',-day(TODAY())+1,TODAY()),则[Date_Given]结束)
    那么什么时候5点
    (如果[Date_Given]=DATEADD('month',-1,DATETRUNC('month',TODAY()),则[Date_Given]结束)
    那是什么时候
    (如果[Date_Given]=DATEADD('month',-3,DATETRUNC('month',TODAY()),则[Date_Given]结束)
    结束
    
    不用说,您必须为剩余的两个值合并适当的计算

    第3步
    日期箱
    放置在行货架上,并另外放置在过滤卡上。(在此..特殊值选项卡中仅过滤空值)。将
    measure_1
    添加到所需类型。显示
    参数1
    ,视图就准备好了。检查屏幕截图(今天的系统日期-2020年12月16日)


    关于您编辑的问题,我建议如下解决方法(因为创建一个计算字段,其中一个值的输入可能导致多个值的输出,这在我看来是不合逻辑的,并且在数学的基本规则下是不可能的)

    根据需要创建8个不同的计算字段

    最近3个月M

    IF [Date_Given] < DATETRUNC('month', TODAY()) AND [Date_Given] >= DATEADD('month', -3, DATETRUNC('month', TODAY())) then [Measure_1] END
    
    如果[Date\u Given]=DATEADD('month',-3,DATETRUNC('month',TODAY()),则[Measure\u 1]结束
    
    类似地,对于其他所需的箱子,创建一个单独的计算字段。此后,您可以构建问题中包含的视图/viz


    这正是我所需要的。唯一的问题是,我不是在寻找一个参数,而是一个新的维度,它将为我存储日期。我想删除原始帖子中列出的新标题栏部分的字段。无法理解,请您将所需输出包含在文本表中或手写?我已编辑了我的原始帖子,并进行了澄清。感谢您在这一点上的帮助!还请添加您的数据结构视图!Tableau现有的日期函数基本上已经允许所有这些。当您已经可以从日期选择器获得所有这些数据时,为什么还要使用特殊函数或新列?如果您正在寻找一些重叠的指标,即具有多对多映射的计算字段,除非使用程序语言,否则这将是很难做到的。计算字段只能映射为一对一。如果没有硬编码,一个输入(日期)不能与多个结果(值)映射。根据数学上的定义,一个函数只能有一个图像。但是,如果从一个输入(日期)创建多个非重叠字段,然后将所有这些字段合并到一个仪表板中