永洪社区

标题: 开始日期与结束日期的使用 [打印本页]

作者: yhdata_8957    时间: 2024-11-4 11:44
标题: 开始日期与结束日期的使用
我要实现一个场景,在永洪bi里运行,需要js脚本代码:首先会有两个下拉参数组件,我会默认调整成日期格式
我的需求是:1、(打开时运行)我能够在打开的时候,让开始日期固定到当年的一月1日,结束日期默认为当年昨日
2、(变化时运行)当我选择结束日期选择的时候,比如我选择2024年11月4日,开始日期会自动变成结束日期往前推12月的日期,也就是开始日期自动变成2023年11月4日,(代码里尽量写成往前推12月的逻辑)
3、我这里有个前置条件是:使用人是不用去调整开始日期的。
希望能够解答,谢谢。

作者: yhdata_lyaa    时间: 2024-11-4 13:34
1.下拉参数组件单选吗,是绑定的日期字段吗,确认有对应的日期数据?
2.可以写脚本控制,建议使用文本参数组件的日期模式dateAdd函数
https://www.yonghongtech.com/rea ... ighlightsub=dateadd
3.使用人是不用去调整开始日期的,可以不调整使用,但是不能做到固定不让他不不能选

作者: yhdata_8957    时间: 2024-11-4 13:40
yhdata_lyaa 发表于 2024-11-4 13:34
1.下拉参数组件单选吗,是绑定的日期字段吗,确认有对应的日期数据?
2.可以写脚本控制,建议使用文本参数 ...

1、这个问题是绑的日期自动,日期就很多呀,有很多日期的选择
2、脚本这边想实现有办法吗?不太懂js
3、我想到是设定后,把开始日期隐藏起来,这样使用者就不用去修改开始日期了
作者: yhdata_青山    时间: 2024-11-4 14:23
日期用文本参数组件,日期格式,不设置默认值
作者: yhdata_青山    时间: 2024-11-4 14:24
yhdata_青山 发表于 2024-11-4 14:23
日期用文本参数组件,日期格式,不设置默认值

装载时运行:
作者: yhdata_青山    时间: 2024-11-4 14:26
yhdata_青山 发表于 2024-11-4 14:23
日期用文本参数组件,日期格式,不设置默认值

装载时运行:
param["开始日期"] = formatDate(date(param["_THIS_YEAR_"], '1', '1'), "yyyy-MM-dd")
param["结束日期"] = formatDate(param["_LAST_FULL_DAY_"], "yyyy-MM-dd")
文本参数1.value = param["开始日期"]
文本参数2.value = param["结束日期"]

提交时运行:
var end_date = 文本参数2.value
if(end_date != param["结束日期"]){
   param["开始日期"] = dateAdd(parseDate(end_date, "yyyy-MM-dd"),"year",-1)
   文本参数1.value = param["开始日期"]
}
作者: yhdata_lyaa    时间: 2024-11-4 14:26
1.装载时运行脚本
  1. var a=dateTrunc('year',today())
  2. 下拉列表参数1.setSelectedObjects([a], DATE);
  3. //开始日期设置今年第一天

  4. 下拉列表参数2.setSelectedObjects([param["_LAST_FULL_DAY_"]], DATE);
  5. //结束日期默认为当年昨日
复制代码
2.变化时运行
开始日期会自动变成结束日期往前推12月的日期
  1. var  b=dateAdd(下拉列表参数2.getSelectedObjects()[0],'month',-12)
  2. 下拉列表参数1.setSelectedObjects([b], DATE);
复制代码



作者: yhdata_8957    时间: 2024-11-4 14:32
yhdata_青山 发表于 2024-11-4 14:24
装载时运行:

var a=dategap
(param["开"],param["结"],'monthofyear')=12

我按你说的的这么写的,选的文本参数日期格式。
但不满足我的需求条件啊:1、我需要打开的时候默认开始日期是今年1月1日,结束是到昨天
2、操作的时候,选结束日期,然后开始日期默认为结束日期往前倒退12月,
请问能给一下源码吗?
作者: yhdata_8957    时间: 2024-11-4 14:46
yhdata_lyaa 发表于 2024-11-4 14:26
1.装载时运行脚本
2.变化时运行
开始日期会自动变成结束日期往前推12月的日期

你好,我根据这个代码得到的场景是:1、点击页面后,开始日期为去年的今天,结束日期为今年的昨天---所以装载时打开时:开始日期没有实现为今年的第一天(请帮忙核查一下)
2、变化时运行时倒退十二月,可以正常使用
作者: yhdata_青山    时间: 2024-11-4 14:50
yhdata_8957 发表于 2024-11-4 14:32
var a=dategap
(param["开"],param["结"],'monthofyear')=12

我发的已经是全部代码了,你先新建一个页面,把代码放上去试一下,可以的话再加你自己的代码,提交时运行 大括号里再加一行代码:param["结束日期"] = end_date
作者: yhdata_8957    时间: 2024-11-4 15:10
yhdata_lyaa 发表于 2024-11-4 14:26
1.装载时运行脚本
2.变化时运行
开始日期会自动变成结束日期往前推12月的日期

我又试了一下,变化时运行的脚本优先级会高于装载时运行,所以我打开页面的时候,开始日期就和结束日期相差一年了,这个要怎么处理呢
作者: 宇文波    时间: 2024-11-4 15:40
直接在变化时运行写就行啦,开始结束参数组件不设置默认,勾选。
js脚本加个判断
1.当开始参数为空,参数赋默认值,
2.结束一样
作者: yhdata_8957    时间: 2024-11-4 16:08
yhdata_Dkp2dKHh 发表于 2024-11-4 15:40
直接在变化时运行写就行啦,开始结束参数组件不设置默认,勾选。
js脚本加个判断
1.当开始参数为空,参数赋 ...

脚本里面只能使用iif函数啊
作者: 宇文波    时间: 2024-11-4 16:14
yhdata_8957 发表于 2024-11-4 16:08
脚本里面只能使用iif函数啊

脚本里JS循环 判断都可以写,别只看他们列出的函数,你这个 在if里面做几个判断 赋值就再结合过滤就ok啦。
作者: yhdata_lyaa    时间: 2024-11-4 16:17
yhdata_8957 发表于 2024-11-4 14:46
你好,我根据这个代码得到的场景是:1、点击页面后,开始日期为去年的今天,结束日期为今年的昨天---所以 ...

应该是与第二点冲突了,报告打开先执行装载时运行脚本,再执行变化时运行脚本。
结束日期有默认值昨天,变化运行又设置了 开始=结束-12
作者: yhdata_lyaa    时间: 2024-11-4 16:18
参考楼上的办法解决试试
作者: yhdata_8957    时间: 2024-11-4 16:22
yhdata_Dkp2dKHh 发表于 2024-11-4 16:14
脚本里JS循环 判断都可以写,别只看他们列出的函数,你这个 在if里面做几个判断 赋值就再结合过滤就ok啦 ...

我大概知道你的思路,但我不太清楚怎么去写,if ('开始日期' ==null ),then var a=dateTrunc('year',today())
开始日期.setSelectedObjects([a], DATE);
//开始日期设置今年第一天
结束日期.setSelectedObjects([param["_LAST_FULL_DAY_"]], DATE);
//结束日期默认为当年昨日

elseif  var  b=dateAdd(结束日期.getSelectedObjects()[0],'month',-12)
开始日期.setSelectedObjects(, DATE);
//开始日期与结束日期相差12月、

类似这样去写吗?

作者: 宇文波    时间: 2024-11-4 16:32
if (isNull(param["结束参数"])) {
    param["结束参数"]=昨天;
    param["开始参数"]=昨天年份的第一天;

} else {
    param["开始参数"]=结束日期年份第一天;
};
差不多就这样写变化时运行就OK啦 ,弄个参数组件给结束日期选日期就OK,数据在sql或者图表过滤用 开始参数和结束参数
JS 这东西直接找个ai大模型,改改用BI里的变量格式一样用

作者: yhdata_8957    时间: 2024-11-4 16:48
yhdata_Dkp2dKHh 发表于 2024-11-4 16:32
if (isNull(param["结束参数"])) {
    param["结束参数"]=昨天;
    param["开始参数"]=昨天年份的第一天; ...

感谢大家回复
作者: yhdata_8957    时间: 2024-11-4 16:56
yhdata_Dkp2dKHh 发表于 2024-11-4 16:32
if (isNull(param["结束参数"])) {
    param["结束参数"]=昨天;
    param["开始参数"]=昨天年份的第一天; ...

function getYesterday() {
    var today = new Date();
    today.setDate(today.getDate() - 1);
    return today;
}

function getFirstDayOfYear(date) {
    return new Date(date.getFullYear(), 0, 1);
}

if (isNull(param["结束日期"])) {
    param["结束日期"] = getYesterday();
    param["开始日期"] = getFirstDayOfYear(getYesterday());
} else {
    var endDate = new Date(param["结束日期"]);
    endDate.setMonth(endDate.getMonth() - 12);
    param["开始日期"] = endDate;
}(;´Д`)没有生效
作者: 宇文波    时间: 2024-11-4 17:11
yhdata_8957 发表于 2024-11-4 16:48
感谢大家回复

if (isNull(param["结束参数"])) {
    param["结束参数"]=param["_LAST_FULL_DAY_"];
    param["开始参数"]=edate(param["_LAST_FULL_DAY_"],-12);
} else {
    param["开始参数"]=edate(param["结束参数"],-12);
};
param["结束参数"]用的是参数组件的参数名,默认不勾选,过滤,检查自己数据类型是不是日期类型的,钥匙文本的上面的转换成文本或者改数据的,检查参数组件有没有设置成日期格式。自己写的JS方法用debug测试有没有用
作者: yhdata_8957    时间: 2024-11-5 10:36
yhdata_青山 发表于 2024-11-4 14:50
我发的已经是全部代码了,你先新建一个页面,把代码放上去试一下,可以的话再加你自己的代码,提交时运行 ...

我按你的方法去试了,和大家的效果一样,装载时运行的脚本在加上变化时运行的脚本后都不生效了
作者: yhdata_8957    时间: 2024-11-5 10:49
本帖最后由 yhdata_8957 于 2024-11-5 10:51 编辑
yhdata_Dkp2dKHh 发表于 2024-11-4 17:11
if (isNull(param["结束参数"])) {
    param["结束参数"]=param["_LAST_FULL_DAY_"];
    param["开始参 ...

我修改了变量 放进变化时运行,都不生效你的逻辑就是判断结束日期是否为空来决定开始日期的变化形式吧

作者: 宇文波    时间: 2024-11-5 11:37
yhdata_8957 发表于 2024-11-5 10:49
我修改了变量 放进变化时运行,都不生效你的逻辑就是判断结束日期是否为空来决定开始日期的变化形式吧
...

你这需求场景不就是修改过滤条件的两个时间参数嘛。结束参数通过组件传值,开始参数通过结束参数计算传值。结束参数组件没选时,给个默认值而已,逻辑是这样,生效不生效的用的都是内置的函数,用debug测下吧
作者: yhdata_l2BtxABd    时间: 2024-11-5 12:06
yhdata_lyaa 发表于 2024-11-4 13:34
1.下拉参数组件单选吗,是绑定的日期字段吗,确认有对应的日期数据?
2.可以写脚本控制,建议使用文本参数 ...


作者: yhdata_青山    时间: 2024-11-5 15:10
yhdata_8957 发表于 2024-11-5 10:36
我按你的方法去试了,和大家的效果一样,装载时运行的脚本在加上变化时运行的脚本后都不生效了 ...

我自己试的没问题。。。

作者: yhdata_8957    时间: 2024-11-5 16:34
yhdata_青山 发表于 2024-11-5 15:10
我自己试的没问题。。。

解决啦
作者: yhdata_lyaa    时间: 2024-11-5 16:42
yhdata_8957 发表于 2024-11-5 16:34
解决啦






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