"比如现在是 2023-09 月, 2023-09-01、2023-09-02、2023-09-03 就是第一周 2023-09-04 到 2023-09-10 就是第二周 …… 2023-09 .."
比如现在是 2023-09 月,2023-09-01、2023-09-02、2023-09-03 就是第一周2023-09-04 到 2023-09-10 就是第二周……2023-09-25 到 2023-09-30 就是第五周
按照这种格式来给数据分组做统计,筛选是按照每个月第几周来多选,然后转化成日期区间,报表通过区间展示出各个周的统计数据。这样的要怎么写?由于报表里不能用 dual 表,实在是不知道咋实现
=arg_no=1 =long(datetime(pdate@y(now()))) =365.new(datetime(86400000*(~-1)+A2):dt,1:val) =A3.group(month(dt)).(~.groups@b(pdate@w1(dt);date(min(dt)):st,date(max(dt)):et,sum(val):amount)(arg_no))
每月周数对不齐,序号会越界,用.select(#==arg_no)
=A3.group(month(dt)).(~.groups@b(pdate@w1(dt);date(min(dt)):st,date(max(dt)):et,sum(val):amount).select(#==arg_no))
在报表里用 SPL:interval@1(pdate@m(dt), dt ) 可以计算日期 dt 所在的当月周序号,剩下就是常规报表动作。
ORACLE 不会写,这里也不会回答 ORACLE 的问题报表里不能用 dual 表是啥意思?报表里把有 FROM dual 的 SQL 扔给 ORACLE 肯定能执行啊。
三楼的方法是最简单的,实际使用时报表内制作如下,比如数据集:
dt 是日期字段,value 是数值,报表中要求按照日期所在月的第几周对 value 进行汇总求和,则报表中单元格表达式如下:
B2 中表达式:=ds1.group(spl(“interval@1(pdate@m(?), ? )”,dt,dt)+1)
spl(“interval@1(pdate@m(?), ? )”,dt,dt)+1 这个表达式计算的是 dt 字段日期在该月的第几周,注意后边要加 1,然后再通过报表的 group 函数分组就行,剩下就是常规操作了。
或者 B2 中直接使用报表的 interval 函数也可以,B2 表达式 =ds1.group(interval@1(pdate@m(dt),dt)+1),具体可以看下 interval 函数说明
每月周数对不齐,序号会越界,用.select(#==arg_no)
=A3.group(month(dt)).(~.groups@b(pdate@w1(dt);date(min(dt)):st,date(max(dt)):et,sum(val):amount).select(#==arg_no))
在报表里用 SPL:interval@1(pdate@m(dt), dt ) 可以计算日期 dt 所在的当月周序号,剩下就是常规报表动作。
ORACLE 不会写,这里也不会回答 ORACLE 的问题
报表里不能用 dual 表是啥意思?报表里把有 FROM dual 的 SQL 扔给 ORACLE 肯定能执行啊。
三楼的方法是最简单的,实际使用时报表内制作如下,比如数据集:
dt 是日期字段,value 是数值,报表中要求按照日期所在月的第几周对 value 进行汇总求和,则报表中单元格表达式如下:
B2 中表达式:=ds1.group(spl(“interval@1(pdate@m(?), ? )”,dt,dt)+1)
spl(“interval@1(pdate@m(?), ? )”,dt,dt)+1 这个表达式计算的是 dt 字段日期在该月的第几周,注意后边要加 1,然后再通过报表的 group 函数分组就行,剩下就是常规操作了。
或者 B2 中直接使用报表的 interval 函数也可以,B2 表达式 =ds1.group(interval@1(pdate@m(dt),dt)+1),具体可以看下 interval 函数说明