永洪社区

标题: 全局函数&iif函数引用文本参数问题 [打印本页]

作者: 汤七七七七七    时间: 2021-11-24 17:14
标题: 全局函数&iif函数引用文本参数问题
dateGap函数dateGap(数据列日期1,数据列日期2,"dayofyear")==param["文本参数"]
这样写是否可行,目前使用在iif函数判断条件列,表达式结果条件未使用

dateAdd函数
dateAdd(数据列日期1,"dayofyear",param["文本参数"])==数据列日期2
全局函数dateAdd如何直接引用文本参数列,目前如上使用函数结果列无效


请教引用文本参数参与全局函数及iif函数注意事项

作者: 永洪tech-Muse    时间: 2021-11-24 17:14
这个是时间列吗 是的话 要转为文本格式来做比较
作者: 永洪tech-Muse    时间: 2021-11-24 17:29
dateGap(数据列日期1,数据列日期2,"dayofyear")==param["文本参数"]   
这个是需要给文本参数赋值吗

dateGap(数据列日期1,数据列日期2,"dayofyear")   这样是可以的


文本参数不是一个列 只是一个单独的参数 现在是需要做什么呢



具体操作步骤是什么呢

作者: 汤七七七七七    时间: 2021-11-24 17:39
永洪tech-zxx 发表于 2021-11-24 17:29
dateGap(数据列日期1,数据列日期2,"dayofyear")==param["文本参数"]   
这个是需要给文本参数赋值吗

背景是:我需要根据[文本参数填写的数字]、[日期列1]、[日期列2] 三者之间进行判断,如果日期列1+文本参数数字的日期结果等于日期列2,则取日期列2数据A,若日期列1+文本参数的日期结果大于昨天日期,则取昨天日期的数据B,否则结果取0
不知道怎么运用函数实现
作者: 永洪tech-Muse    时间: 2021-11-25 10:35
本帖最后由 永洪tech-zxx 于 2021-11-25 10:43 编辑

日期列做对比的话 注意不要直接用日期类型 需要转为字符串类型做对比


var a =formatDate(dateAdd(col['交易时间'],'dayofyear',param['文本参数1']),'yyyy-MM-dd')      //日期列+文本参数
var b =formatDate(col['日期2'],'yyyy-MM-dd')   //日期列2转为文本
if(a==b){   //文本之间对比

col['日期2']='A'

}
if(a>formatDate(param['_LAST_FULL_DAY_'],'yyyy-MM-dd')){   //param['_LAST_FULL_DAY_']内置参数表示昨天
col['日期2']=param['_LAST_FULL_DAY_']
}
if(a<b)  //其他可能存在情况建议还是写清楚
{0
}


作者: 汤七七七七七    时间: 2021-11-25 11:22
永洪tech-zxx 发表于 2021-11-25 10:35
日期列做对比的话 注意不要直接用日期类型 需要转为字符串类型做对比

细节表达式:“iif(iif(formatDate(dateAdd(col['上新时间'],'dayofyear',param["文本参数"]),'yyyy-MM-dd')>formatDate(param['_LAST_FULL_DAY_'],'yyyy-MM-dd'),param['_LAST_FULL_DAY_'],dateAdd(col['上新时间'],'dayofyear',param["文本参数"]))==col['统计时间'],col['期末在途库存'],0)*col['成本价']”
上面是我参照你的写的细节表达式,表格显示结果都是0了,是那里还需要注意格式转换么?
你好,你给我的脚本是写在表格的脚本还是整个报告的脚本啊,脚本用的不太溜。
我现在是需要优先通过细节表达式计算一个到最小粒度的值,再通过聚合表达式计算两个细节表达式合计值。
麻烦啦~
作者: 永洪tech-Muse    时间: 2021-11-25 11:56
是哪个版本呢  这个脚本是新建表达式
作者: 汤七七七七七    时间: 2021-11-25 15:49
永洪tech-zxx 发表于 2021-11-25 11:56
是哪个版本呢  这个脚本是新建表达式

版本:8.0.4b
对的,是新建细节表达式里写的脚本,我现在需要先计算到最小粒度的两个指标,再互相聚合计算再相加;所以使用的是新建细节表达式来判断日期1、日期2、昨天、参数、数据、0之间的关系。
作者: 汤七七七七七    时间: 2021-11-29 11:18
永洪tech-zxx 发表于 2021-11-25 17:01
这个是时间列吗 是的话 要转为文本格式来做比较

在此基础上我有个问题啊,在判断符号>、=、<这些的左右两边如果日期比较需要转换为文本的意思是么?
或者在什么样函数使用或者环境下,有格式的限制?
作者: 汤七七七七七    时间: 2021-11-29 11:45
永洪tech-zxx 发表于 2021-11-25 17:01
这个是时间列吗 是的话 要转为文本格式来做比较

iif(iif(formatDate(dateAdd(col['上新时间'],'dayofyear',param["上新天数2"]),'yyyy-MM-dd')>formatDate(dateAdd(now(),'dayofyear',-1),'yyyy-MM-dd'),formatDate(dateAdd(now(),'dayofyear',-1),'yyyy-MM-dd'),formatDate(dateAdd(col['上新时间'],'dayofyear',param["上新天数2"]),'yyyy-MM-dd'))==formatDate(col['统计时间'],'yyyy-MM-dd'),col['期末在途库存'],0)
现在调整成这样了,但是大于昨天的部分依旧没有数值,是有问题的;不大于昨天是没问题的,那还有哪里需要改动。_last_Full_Day 不能识别,是脚本表达式里面的昨天有问题么?
作者: 永洪Tech-CIDX    时间: 2021-11-29 14:52
本帖最后由 永洪Tech-wj 于 2021-11-29 15:18 编辑
汤七七七七七 发表于 2021-11-29 11:45
iif(iif(formatDate(dateAdd(col['上新时间'],'dayofyear',param["上新天数2"]),'yyyy-MM-dd')>formatDat ...

建议使用dataGap(date1,date2,"dayofyear")>0这种方式,判断两个日期的时间差,大于0就是date1日期比date2大




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