第一张图是我将查询条件改成当天查询出来的数据,第二张图是实际多天的数据库数据,请问用fineReport决策报表能否按照天生成柱形图轮换播放

看了下文档,案例中用的是STRFTIME函数 但是我的数据库是SQL Server 好像不支持这个函数


效果类似这个:不过我的数据库是sqlserver并不支持strftime函数1579070006809952.gif

--------------------------------------------------------------------------------------

目前我把部分语句替换成了帆软中的公式但是通过UNIQUEARRAY(dd.select('日期'))依然获取不到日期数组

select convert(varchar(5),ddate,10) as 日期,
      ds.cDCName as 区域,
      convert(decimal(20,2),(sum(iQuantity))) as 订货数量,
      convert(decimal(20,2),(sum(iNatSum))) as 订货总金额,
      enum.enumname as 用途
from SO_SOMain as som left join SO_SODetails as sod on som.id = sod.ID
left join Customer as cr on som.cCusName = cr.cCusName
left join districtclass as ds on cr.cDCCode = ds.cDCCode
left join AA_enum as enum on sod.TJHG1_ipurpose = enum.EnumCode and enum.EnumType = 'TJHG1_Purposetype'
where dDate between
'${if (day(today())>26,todate(date(year(today()),month(today()),'25')),todate(date(year(today()),month(today())-1,'26')))}'
and convert(varchar(100),GETDATE(),23)
group by dDate,cDCName,enum.EnumName
order by dDate,cDCName

FineReport 13352013513 发布于 2020-12-21 15:52 (编辑于 2020-12-22 14:09)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
张洪威Lv6高级互助
发布于2020-12-21 16:58

strftime 不支持的话,你用其他函数也能实现的,百度搜下sqlserver的convert函数。

或者就year month函数获取年月然后拼接,或者left截取左边。

  • 13352013513 13352013513(提问者) 我也在考虑用convert代替strftime不过有点难度和难题,首先它案例条件中的left(monthdelta(\"1997-01-01\",mod((datetonumber(now())-datetonumber((a))/1000,12),7))还没看懂,其次我的查询语句已经在用的条件是where dDate between ( case when DAY(convert(varchar(100),GETDATE(),23))< 26 then convert(nvarchar(30),convert(nvarchar(8),dateadd(month,-1,convert(varchar(100),GETDATE(),23)),120)+\'26\',120) --如果条件abc日期(天)取值小于等于26则将日期变换为上个月26号7:30:00 when DAY(convert(varchar(100),GETDATE(),23)) > 26 then convert(nvarchar(30),convert(nvarchar(8),convert(varchar(100),GETDATE(),23),120)+\'26\',120) --如果条件abc日期(天)取值大于26号则将日期变换为本月26号7:30:00 ELSE convert(varchar(100),GETDATE(),23) end ) and convert(varchar(100),GETDATE(),23) 目前正在研究怎么写
    2020-12-22 11:20 
  • 13352013513 13352013513(提问者) 我们的月周期是从每月26号到次月25号算一个账期,所以在研究轮播的同时还要考虑对日期的判断,我就懵逼了
    2020-12-22 11:24 
  • 张洪威 张洪威 回复 13352013513(提问者) left(monthdelta(\\\"1997-01-01\\\",mod((datetonumber(now())-datetonumber((a))/1000,12),7)) 这个是帆软的公式,你在帆软公式界面搜索下关键字就能知道什么意思了。
    2020-12-22 11:25 
  • 13352013513 13352013513(提问者) 回复 张洪威 大致看明白了 不过要实现还是不懂,我大概理解的是语句获取了年月 然后通过报表标题公式UNIQUEARRAY(ds1.select(\"年月\"))对数据源进行轮播查询,但实际要把 ( case when DAY(convert(varchar(100),GETDATE(),23))< 26 then convert(nvarchar(30),convert(nvarchar(8),dateadd(month,-1,convert(varchar(100),GETDATE(),23)),120)+\\\'26\\\',120) --如果条件abc日期(天)取值小于等于26则将日期变换为上个月26号7:30:00 when DAY(convert(varchar(100),GETDATE(),23)) > 26 then convert(nvarchar(30),convert(nvarchar(8),convert(varchar(100),GETDATE(),23),120)+\\\'26\\\',120) --如果条件abc日期(天)取值大于26号则将日期变换为本月26号7:30:00 ELSE convert(varchar(100),GETDATE(),23) end ) and convert(varchar(100),GETDATE(),23)这一块用$帆软中的函数替代 我还不知道如何去解决
    2020-12-22 13:20 
  • 13352013513 13352013513(提问者) 回复 张洪威 我Sqlserver中对日期有一个判断 如果当日小于26号则将开始日期定为上个月26号结束日期定位当前,如果当前日期大于26号则开始日期就是这个月26号,然后结束日期是当前日期
    2020-12-22 13:23 
最佳回答
0
13352013513Lv2见习互助
发布于2020-12-22 17:01

'${left
(
    datedelta
    (
        if (
            day(today())>26,todate(date(year(today()),month(today()),'25')),
            todate(date(year(today()),month(today())-1,'26'))),
        mod((datetonumber(now())-datetonumber(a))/1000,12)
        )
,10
)}'

使用这个条件 成功了

  • 1关注人数
  • 341浏览人数
  • 最后回答于:2020-12-22 17:01
    请选择关闭问题的原因
    确定 取消
    返回顶部