永洪社区

标题: 数据集传参时提示报告中有同名参数,应该怎么修改呐? [打印本页]

作者: 我是卡拉米    时间: 2024-7-8 11:26
标题: 数据集传参时提示报告中有同名参数,应该怎么修改呐?
数据集传参时提示报告中有同名参数,应该怎么修改呐?

作者: yhbi老6了    时间: 2024-7-8 11:26
本帖最后由 yhbi老6了 于 2024-7-9 08:08 编辑
yh-10044 发表于 2024-7-8 17:21
这里

标签范围不对,空参时,你可以参照这个理解一下
where 1=1 And <a> a=?{a}</a>  空参为  where 1=1 and
where 1=1 <a> and a=?{a}</a>   空参为  where 1=1
看着你上面都知道要用1=1避免第一个参数没有时不会没有问题,感觉应该会注意到这个才对的呀
像你上面的sql,参数标签都在decode函数里面,明显是会有问题的,全都空参就只剩一堆decode函数了,这样肯定报错 where 1=1 and ( decode(,'周',week) >= or decode(,'月'month)>= or decode(,'年',year)>= )

要确保你每一个参数在单独空参时,都不会影响整个sql的语法正确性。
最后你想简单地校验是否可行,最好所有参数都不要设置默认值,让所有参数都空的情况下,sql依旧是没有语法错误的



作者: yhdata_lyaa    时间: 2024-7-8 11:46
检查下有没有同名参数呢,换一个名字
作者: 我是卡拉米    时间: 2024-7-8 13:17
yhdata_lyaa 发表于 2024-7-8 11:46
检查下有没有同名参数呢,换一个名字

举个例子,我现在组件参数叫年。我的数据集传参也写的<年>year=?{年}</年>。
保存时报有同名参数,然后我把数据集中参数改为年1.这样我怎么让数据集的参数与前台报表参数联动起来呐?
是脚本叫param['年']==param['年1']这样么?
作者: yhdata_lyaa    时间: 2024-7-8 13:42
yh-10044 发表于 2024-7-8 13:17
举个例子,我现在组件参数叫年。我的数据集传参也写的year=?{年}。
保存时报有同名参数,然后我把数据集 ...

当前是什么版本呢
作者: yhdata_lyaa    时间: 2024-7-8 13:44
yh-10044 发表于 2024-7-8 13:17
举个例子,我现在组件参数叫年。我的数据集传参也写的year=?{年}。
保存时报有同名参数,然后我把数据集 ...

param['年']=param['年1']
作者: 我是卡拉米    时间: 2024-7-8 13:49
yhdata_lyaa 发表于 2024-7-8 13:42
当前是什么版本呢

947b
作者: 我是卡拉米    时间: 2024-7-8 14:16
yhdata_lyaa 发表于 2024-7-8 13:44
param['年']=param['年1']

不好用呢,没反应
作者: yhbi老6了    时间: 2024-7-8 14:22
本帖最后由 yhbi老6了 于 2024-7-8 14:42 编辑

我算看懂了,你数据集中有年月这种日期参数,并且是想通过参数组件传递到数据集中的。导致你出现了同名参数。这个套娃,呃......
我的建议是,可以就最好sql数据集不要做参数。直接用宽表模型这样就只是单纯的select from就好,所有的参数通过图表组件的过滤器直接传递给宽表(直连的情况下,图表的过滤器最终都会传递给sql数据集的where的,如果你对永洪bi原理了解的话应该可以理解这个)。将数据集纯净化,不要有过多的处理。
其实这个bi和传统的前后端开发有很大的区别,传统的前后端开发时参数必须传递到sql上。但是目前数仓这块,可以最好就直接用宽表模型不做更多关联以及处理。


作者: 我是卡拉米    时间: 2024-7-8 14:30
yhbi老6了 发表于 2024-7-8 14:22
我算看懂了,你数据集中有年参数,并且是想通过参数组件传递到数据集中的。导致你出现了同名参数。这个套娃 ...

有解决思路么老师
作者: yhbi老6了    时间: 2024-7-8 14:40
yh-10044 发表于 2024-7-8 14:30
对 有解决思路么老师

没有很好的解决思路,只有前面几个老师说的方法,不同名,然后再传递给sql数据集,即在变化时运行里面写二次传递的逻辑。你这个做法,我们很少会这样处理。一般直接sql数据集不带参数
作者: 我是卡拉米    时间: 2024-7-8 14:43
yhbi老6了 发表于 2024-7-8 14:22
我算看懂了,你数据集中有年月这种日期参数,并且是想通过参数组件传递到数据集中的。导致你出现了同名参数 ...

老师,首先我想问这个报告同名参数我应该怎么处理?
然后我们再来讨论参数传给数据集还是在前台增加过滤这个问题。
作者: yhbi老6了    时间: 2024-7-8 14:47
yh-10044 发表于 2024-7-8 14:43
老师,首先我想问这个报告同名参数我应该怎么处理?
然后我们再来讨论参数传给数据集还是在前台增加过滤 ...

修改参数组件名称:年1 ,变化时运行里面写 param['年']=param['年1'] 试试看
作者: 我是卡拉米    时间: 2024-7-8 14:49
yhbi老6了 发表于 2024-7-8 14:22
我算看懂了,你数据集中有年月这种日期参数,并且是想通过参数组件传递到数据集中的。导致你出现了同名参数 ...

根据上个帖子可以看出 我是根据一个叫类型的参数,去定我是用年的时间过滤还是日期的时间范围过滤。
我个人感觉在前端增加过多过滤条件会导致报表打开变慢。
另外我的sql里面有计算合计与小计,我的合计是不根据维度条件的筛选而变化的,举个例子,我三个国家合计是100,我筛选某一个国家展示的时候,合计仍然展示100,不能变化。
所以我的数据集是用临时表写的,第一段是根据类型判断我用年的时间过滤还是日期的时间范围过滤,将数据筛选好后,再进行合计+明细。
所以我怎么解决上面的报错嘞?
作者: 我是卡拉米    时间: 2024-7-8 14:51
yhbi老6了 发表于 2024-7-8 14:47
修改参数组件名称:年1 ,变化时运行里面写 param['年']=param['年1'] 试试看

试了哦,没有变化,感觉数据就是数据集中默认的那天的数据。然后我查看报告,筛选任何时间都没有变化~
作者: yhbi老6了    时间: 2024-7-8 14:59
本帖最后由 yhbi老6了 于 2024-7-8 15:00 编辑
yh-10044 发表于 2024-7-8 14:51
试了哦,没有变化,感觉数据就是数据集中默认的那天的数据。然后我查看报告,筛选任何时间都没有变化~ ...

你是指,修改成功了,但是筛选没有失效?
作者: 我是卡拉米    时间: 2024-7-8 15:05
yhbi老6了 发表于 2024-7-8 14:59
你是指,修改成功了,但是筛选没有失效?

是的修改成功 没有报错提醒,但是筛选也没有效果,感觉前台参数值没有传回去。
我把现在的设置截图放下一层.
作者: 我是卡拉米    时间: 2024-7-8 15:09
不带1的是前台组件参数名,带1的是数据集的参数名
作者: yhbi老6了    时间: 2024-7-8 15:20
yh-10044 发表于 2024-7-8 15:09
不带1的是前台组件参数名,带1的是数据集的参数名

其实主要原因是套娃了,如果组件可以用日期维表就可以跳出来了,或者你把这个数据集的年月周单独做一个数据集给参数组件用。这样也不套娃。
作者: yhbi老6了    时间: 2024-7-8 15:24
本帖最后由 yhbi老6了 于 2024-7-8 15:29 编辑
yh-10044 发表于 2024-7-8 15:05
是的修改成功 没有报错提醒,但是筛选也没有效果,感觉前台参数值没有传回去。
我把现在的设置截图放下一 ...

不过我测试是可以筛选的哦,我这边用的是列表参数组件,不要用下拉组件哈,可以用参数组件的下拉布局模式
作者: 我是卡拉米    时间: 2024-7-8 15:32
yhbi老6了 发表于 2024-7-8 15:24
不过我测试是可以筛选的哦,我这边用的是列表参数组件,不要用下拉组件哈,可以用参数组件的下拉布局模式 ...

我的年月周是下拉列表参数,那俩日期的是文本参数的日期类型
作者: yhbi老6了    时间: 2024-7-8 15:42
本帖最后由 yhbi老6了 于 2024-7-8 15:43 编辑
yh-10044 发表于 2024-7-8 15:32
我的年月周是下拉列表参数,那俩日期的是文本参数的日期类型

将下拉参数组件换列表参数组件试试看。使用列表参数组件的下拉布局。(ps:我们一般都不用下拉参数组件的,因为不好用,而是用列表参数组件的下拉布局)
作者: 我是卡拉米    时间: 2024-7-8 15:46
yhbi老6了 发表于 2024-7-8 15:20
其实主要原因是套娃了,如果组件可以用日期维表就可以跳出来了,或者你把这个数据集的年月周单独做一个数 ...

年月周单独一个数据集,这个能再详细说说么?
作者: 我是卡拉米    时间: 2024-7-8 15:47
yhbi老6了 发表于 2024-7-8 15:42
将下拉参数组件换列表参数组件试试看。使用列表参数组件的下拉布局。(ps:我们一般都不用下拉参数组件的 ...

您是什么版本?
作者: yhbi老6了    时间: 2024-7-8 15:47
本帖最后由 yhbi老6了 于 2024-7-8 16:00 编辑
yh-10044 发表于 2024-7-8 15:47
您是什么版本?

9.0.4,哈哈哈,这个和版本没有太大关系,设置位置在这
作者: yhbi老6了    时间: 2024-7-8 15:51
本帖最后由 yhbi老6了 于 2024-7-8 16:00 编辑
yh-10044 发表于 2024-7-8 15:46
年月周单独一个数据集,这个能再详细说说么?

比如你之前的数据集是select branch,area,day,week,month,year,pv,uv from table where 1=1 <day>and day=?{day}</day><week>And week=?{week}</week>
多建一个时间维度数据集出来
select day,week,month,year  from table group by day,week,month,year
然后筛选组件从时间维度数据集选列,不知道你数据量如何,直连如果数据量太大可能会慢。我们维表一般是入yh的mpp数据库,所以不会慢


作者: 我是卡拉米    时间: 2024-7-8 16:02
yhbi老6了 发表于 2024-7-8 15:51
比如你之前的数据集是
select branch,area,day,week,month,year,pv,uv from table where 1=1 and day=?{da ...

我把年月周 和日期单独放在了一个数据集,报告年月周引用维度数据集的数据。但是现在报错了,报其他筛选字段的Oracle00936。这又是哪里的问题呐?
作者: yhbi老6了    时间: 2024-7-8 16:06
本帖最后由 yhbi老6了 于 2024-7-8 16:08 编辑
yh-10044 发表于 2024-7-8 16:02
我把年月周 和日期单独放在了一个数据集,报告年月周引用维度数据集的数据。但是现在报错了,报其他筛选 ...

不太懂你为什么会其他筛选报错,不过像是你sql语句语法错误https://cloud.tencent.com/develo ... 8%E8%BE%BE%E5%BC%8F
作者: 我是卡拉米    时间: 2024-7-8 17:21
yhbi老6了 发表于 2024-7-8 16:06
不太懂你为什么会其他筛选报错,不过像是你sql语句语法错误https://cloud.tencent.com/develo ... 8%E8%BE ...

我感觉还是传参这里有问题,帮忙看下
作者: 我是卡拉米    时间: 2024-7-8 17:21
这里
作者: yhdata_ruby    时间: 2024-7-8 21:32
yh-10044 发表于 2024-7-8 17:21
我感觉还是传参这里有问题,帮忙看下

如果你是希望前台参数改变的值传递给到数据集的话,是不是应该写成param["年1"]=param["年"]。
另外产品这个报错就是前台参数不可以与数据集参数命名一致,可以将需要传递的字段作为一个新的数据集,再去绑定在同名参数组件上
作者: 我是卡拉米    时间: 2024-7-9 13:29
yhdata_ruby 发表于 2024-7-8 21:32
如果你是希望前台参数改变的值传递给到数据集的话,是不是应该写成param["年1"]=param["年"]。
另外产品 ...

现在的问题在26楼
作者: 爱我所爱    时间: 2024-9-2 11:37
WHERE 快照日期 = LAST_DAY(DATE_SUB(?{快照日期}, INTERVAL 1 MONTH))可以这么写吗?正确的应该怎么写,想通过参数获取上月末




欢迎光临 永洪社区 (https://club.yonghongtech.com/) Powered by Discuz! X3.4