在 Qliksense 数据加载编辑器中将时间文本字符串转换为整数以进行数字运算的简单方法
Simple way to convert time text strings to ints for numeric operation in Qliksense data load editor
TimeTemp
显示为 168@06:43:23AM
stationTime
显示服务区站的开闭时间6AM-10AM
我已将 TimeTemp
分成 2 个不同的列,initialTemp
和 initialTempTime
我已将 stationTime
分成 2 个不同的列,openingTime
和 closingTime
想要的条件语句是“如果不在每2小时间隔内,将initialTemp
单元格变为红色”,所以逻辑如下:
if(initialTempTime <= openingTime + 2, green(), red())
如果表达式 <=
为真, 应该将 initialTemp
变为绿色,否则变为红色。但是,这已将 initialTemp
个单元格全部变成红色。
这让我怀疑表达式没有被正确计算,只是默认为 else
。我相信这种情况是 initialTempTime
, openingTime
已被确认为文本字符串数据类型。
由于无法将 string + int
评估为真值,因此它默认为 red()
,从而将所有 initialTemp
单元格变为红色。
解决方案是将字符串类型转换为 int,这样 openingTime
of say 6AM
可以增加 2 小时,并且可以正确评估数字运算。
将时间文本字符串转换为整数以进行条件数值运算的简单方法是什么?
到目前为止的尝试次数:
Time#(SubField(stationTime,'-',1),'hh:mm:ss') as openingTimeTest
这似乎将所有 openingTime
字段转换为 -
(null)
Num(Sum(SubField(stationTime,'-',1) + tempRecordingInterval)) as openingTimeRecordingInterval
其中 SET tempRecordingInterval=2;
Keepchar([initialTempTime],'0123456789.') as [initialTempTimeNum]
考虑下面的脚本。 (为了清楚起见,我将它分成多个 steps/loads)
RawData:
Load
// convert to time
Time(Time#( openingTime, 'h:mm:ss')) as openingTime,
Time(Time#( closingTime, 'h:mm:ss')) as closingTime
;
Load
// "convert" to time looking string
// 6AM will be 6:00:00
// 6PM will be 18:00:00
if( index(openingTime, 'AM') > 0, KeepChar(openingTime, '01234567890'),
KeepChar(openingTime, '01234567890') + 12) & ':00:00' as openingTime,
if( index(closingTime, 'AM') > 0, KeepChar(closingTime, '01234567890'),
KeepChar(closingTime, '01234567890') + 12) & ':00:00' as closingTime
;
Load
// split the station time
SubField(stationTime, '-', 1) as openingTime,
SubField(stationTime, '-', 2) as closingTime
;
Load * Inline [
stationTime
6AM-10AM
6PM-10PM
];
结果 table 将如下所示:
(显示基于脚本开头的 SET TimeFormat
变量的值)
一旦数据采用 Time
格式,我们就可以像这样 add/subtract 小时:
= time( openingTime + 2 / 24 ) // add two hours to openingTime field
= time( openingTime - 2 / 24 ) // subtract two hours to openingTime field
如果我们 select openingTime
中的“06:00:00” 值,那么两个小时的加法将为我们提供:
TimeTemp
显示为 168@06:43:23AM
stationTime
显示服务区站的开闭时间6AM-10AM
我已将 TimeTemp
分成 2 个不同的列,initialTemp
和 initialTempTime
我已将 stationTime
分成 2 个不同的列,openingTime
和 closingTime
想要的条件语句是“如果不在每2小时间隔内,将initialTemp
单元格变为红色”,所以逻辑如下:
if(initialTempTime <= openingTime + 2, green(), red())
<=
为真, 应该将 initialTemp
变为绿色,否则变为红色。但是,这已将 initialTemp
个单元格全部变成红色。
这让我怀疑表达式没有被正确计算,只是默认为 else
。我相信这种情况是 initialTempTime
, openingTime
已被确认为文本字符串数据类型。
由于无法将 string + int
评估为真值,因此它默认为 red()
,从而将所有 initialTemp
单元格变为红色。
解决方案是将字符串类型转换为 int,这样 openingTime
of say 6AM
可以增加 2 小时,并且可以正确评估数字运算。
将时间文本字符串转换为整数以进行条件数值运算的简单方法是什么?
到目前为止的尝试次数:
Time#(SubField(stationTime,'-',1),'hh:mm:ss') as openingTimeTest
这似乎将所有 openingTime
字段转换为 -
(null)
Num(Sum(SubField(stationTime,'-',1) + tempRecordingInterval)) as openingTimeRecordingInterval
其中 SET tempRecordingInterval=2;
Keepchar([initialTempTime],'0123456789.') as [initialTempTimeNum]
考虑下面的脚本。 (为了清楚起见,我将它分成多个 steps/loads)
RawData:
Load
// convert to time
Time(Time#( openingTime, 'h:mm:ss')) as openingTime,
Time(Time#( closingTime, 'h:mm:ss')) as closingTime
;
Load
// "convert" to time looking string
// 6AM will be 6:00:00
// 6PM will be 18:00:00
if( index(openingTime, 'AM') > 0, KeepChar(openingTime, '01234567890'),
KeepChar(openingTime, '01234567890') + 12) & ':00:00' as openingTime,
if( index(closingTime, 'AM') > 0, KeepChar(closingTime, '01234567890'),
KeepChar(closingTime, '01234567890') + 12) & ':00:00' as closingTime
;
Load
// split the station time
SubField(stationTime, '-', 1) as openingTime,
SubField(stationTime, '-', 2) as closingTime
;
Load * Inline [
stationTime
6AM-10AM
6PM-10PM
];
结果 table 将如下所示:
(显示基于脚本开头的 SET TimeFormat
变量的值)
一旦数据采用 Time
格式,我们就可以像这样 add/subtract 小时:
= time( openingTime + 2 / 24 ) // add two hours to openingTime field
= time( openingTime - 2 / 24 ) // subtract two hours to openingTime field
如果我们 select openingTime
中的“06:00:00” 值,那么两个小时的加法将为我们提供: