Tableau api 表中带条件的窗和

Tableau api 表中带条件的窗和,tableau-api,cumulative-sum,Tableau Api,Cumulative Sum,使用Tableau 10.5,我试图创建一个表格/图表,显示52周滚动窗口内的新(“起跑”)销售总额。下图显示了从ISO第201733周到201832周的52周窗口内新客户(standing start)每周的销售额总和;该行显示了销售的运行总数 下图显示了图表最近几周的数据 “新销售”定义为在报告/ISO周的52周内开始工作的客户(在示例中,201832是报告周,包括开始工作周在201733和201832之间的客户)。取同一周之间的销售总额,利息值为最后一周的销售总额(示例中为504654

使用Tableau 10.5,我试图创建一个表格/图表,显示52周滚动窗口内的新(“起跑”)销售总额。下图显示了从ISO第201733周到201832周的52周窗口内新客户(standing start)每周的销售额总和;该行显示了销售的运行总数

下图显示了图表最近几周的数据

“新销售”定义为在报告/ISO周的52周内开始工作的客户(在示例中,201832是报告周,包括开始工作周在201733和201832之间的客户)。取同一周之间的销售总额,利息值为最后一周的销售总额(示例中为5046546)

我需要的是显示每个报告周对应的52周总数(因此每周的值大约为500万),并且条形图相对平坦(考虑到销售增长等)。我的具体问题是,在进行窗口/移动计算时,我无法确定如何定义窗口(即仅限新帐户)

我希望我的描述足够清楚,以说明我的目标是什么

提前谢谢

编辑/更新(进一步澄清问题):

下例表显示了在201824年和201827年之间,同一时期开设的账户的销售额。在201824周,只有在201824开设的账户有任何销售额(值为1)。在201825周,现在有2周的账户:在201824周开立的账户和在201825周开立的账户,分别销售2和1。随后的每一周都会有一周的额外账户价值,从而使销售总额达到20

+--------+--------+--------+--------+
| 201824 | 201825 | 201826 | 201827 |
+--------+--------+--------+--------+
|        |        |        |      1 |
|        |        |      1 |      2 |
|        |      1 |      2 |      3 |
|      1 |      2 |      3 |      4 |
+--------+--------+--------+--------+
为了继续示例,下表显示了类似的数据,但时间段移动了1周:

+--------+--------+--------+--------+
| 201825 | 201826 | 201827 | 201828 |
+--------+--------+--------+--------+
|        |        |        |      2 |
|        |        |      2 |      3 |
|        |      2 |      3 |      4 |
|      2 |      3 |      4 |      5 |
+--------+--------+--------+--------+
此表中的销售额之和为30:在201825周开立的账户贡献了14(2+3+4+5),在第二周开立的账户贡献了9(2+3+4),依此类推

这两个表描述了我正在寻找的方法,我正在寻找的结果如下:

+--------+--------+
| 201827 | 201828 |
+--------+--------+
|     20 |     30 |
+--------+--------+
如果我在SQL中执行类似的操作,下面将给出我需要的结果:

;with d AS 
(
    select s.ISOWk, a.OSW as StartWeek, sum(s.Sales) as Sales
    from accs a
    join sales s
        on a.ID = s.ID
    where s.ISOWk >= 201701
        and a.OSW >= 201701
    group by s.ISOWk, a.OSW
)
select c.ISOWk, sum(case when d.ISOWk between FYS and c.ISOWk and StartWeek between FYS and c.ISOWk then Vol else 0 end) as Rolling_ss_vol
from d
cross join (select distinct ISOWk, FYS from tblCalendar c where ISOWk between 201801 and 201835) c
group by c.ISOWk
order by ISOWk

其中FYS(前一年开始)链接到ISO周,并指示当前销售期开始的时间(即52周之前)。

我在示例文件中将ISO日期转换为常规日期。这使得进行DATEDIFF计算更加容易。我在Tableau的论坛上找到了这个转换公式

DATEADD('week',INT(MID(STR([Start Week]), 5,2))-1,DATE("01/01/"+(MID(STR([Start Week]), 1,4))))
我重复了同样的一周

然后进行[cust start]LOD以确保正确计算datediff

{fixed [Cust No] : min([start_week_date])}
然后在[Sales within 52]计算字段中

if datediff('week',[cust start], [iso_week_date])<52 then [Sales] end
希望这就是你想要的


工作簿链接不完全正确。例如:对于仅在第11周和第62周之间开立的账户,第62周的值应为第11周和第62周之间的销售额之和。我认为,在计算第15周的销售额时,您的计算包括了第10周开设的账户的销售额,因为在这一点上,这些账户还不到52周。这不是我想要的。这有意义吗?你能提供一些样本数据吗?当然:这个文件包含一些样本/虚拟数据编辑了我的答案。你的答案仍然不太正确:201832周的总数应该是5046546。我编辑了我的问题,希望能更好地描述我的需求。
window_sum(sum([Sales within 52]),-51,0)