我对qlik sense非常陌生-我有一些数据库经验。我的一个队友最近辞职了,他是这段代码的主要所有者。
num(sum({1<[report_date] = {"=$(=(date((currDate))))"}>
+1<[report_date]={"=$(date(currDate) - 7)"}>
+1<[report_date]={"=$(date(currDate) - 30)"}>
} anomoly_count ) / 100 )
有没有人能帮我弄明白它到底想干什么。我的理解是总结了这三天的价值观val on currDate + val on (currDate - 7 days) + val on (curr - 30 days).
我尝试实现的是currDate上的瓦尔+过去7天的平均值+过去30天的平均值。
我尝试为上面的qlik sense查询编写数据库查询等价物,结果不匹配。即,在qlik sense Jmeter 板上呈现的值与我在数据库select语句上看到的值。
sum_count AS(SELECT SUM(anomoly_count)as sum_anomoly_count FROM“summary”WHERE report_date::date IN('2023 -05- 11','2023-05- 04','2023-04- 11')AND anomoly_count IS NOT NULL)
SELECT(sum_count.sum_anomoly_count::NUMERIC / 100)as result FROM sum_count
2条答案
按热度按时间zynd9foi1#
TLDR
我想这就是你想要的
快速说明为什么应该工作
该表达式使用
Aggr()
function来获得每个[report_date]
值的[anomoly_count]
平均值之和。看来你已经把剩下的设置正确了,至少根据你的参数。深入了解Qlik所涉及的概念
您的同事正在使用Qlik表达式的一个名为Set Analysis的功能-一种非常简单的思考方式是将其作为图表中使用的表达式的Where子句。另一种描述的方式是,您将选择“烘焙”到表达式中。集合分析(也称为“集合表达式”)放在聚合函数的开头,如
Sum()
或Avg()
。在您的示例中,这将是聚合函数:
...然后这将是集合分析部分:
让我们注意一下,在这个例子中我们还使用了variables和dollar-sign expansion的概念。我们有一个变量
currDate
,它可能是用Today()
或Now()
function设置为当天的。如果我们试图在这些双引号之间单独使用currDate
,它不会做任何事情,因为Qlik只会看到一个标记或字符串-我们想要访问currDate
变量的实际 * 值 *,所以我们需要使用美元符号扩展来实现。在这里,我们还使用
Date()
function将今天的日期格式化为默认日期格式(否则,Qlik可能会显示一个5位数的数字,从技术上讲,这仍然是一个日期,但在这种情况下,它不会对我们有任何好处)。这里要说明的另一点是--每行前面的
1
被称为Set Identifier,它告诉Qlik是否考虑用户可能做出的选择。1
基本上意味着“忽略此表达式之外的所有选择”。这很重要,因为它本身......表示“其中
[report_date]
是今天的日期值”,但如果用户或图表中的另一个表达式选择100天前的[report_date]
值,则该表达式将返回空集,因为默认情况下,我们会考虑用户选择的那些记录。但是,如果我们再次将1
添加到开头......那么这个表达式将只显示[report_date]是今天日期的记录,而不管选择了什么。
最后要考虑的是set operators的使用,在本例中是分隔集合表达式的加号
+
。在集合表达式中,加号是一个联合运算符,或者在某种程度上是一个大的OR
。最后,下面是你的例子实际上是在说:
请给予[anomoly_count]的总和,其中[report_date]是今天的日期、7天前或30天前,而不考虑任何用户选择。
5f0d552i2#
这不是完整的解决方案-但这是一个很好的起点。