使用查询参数,您可以在运行时将值替换到你的查询语句中,而无需再次编辑查询语句。
Redash使用双花括号来定义需要替换的参数{{ }}
,只要在字符串中出现被双花括号包裹的,都将被视为参数。并会在查询窗格上方出现一个小部件,以便于您更改参数值。
在编辑模式下,您可以单击每个参数小部件的齿轮图标来调整其设置。当你单击”Show Data Only”时,齿轮图标会消失,以便不拥有查询权限的用户无法更改参数。
从UI中添加参数
您可以通过鼠标点击页面上的按钮Add Parameter
或关联键盘的快捷键来插入参数。
您可以通过光标悬停在
Add Parameter
按钮上,来发现自己操作系统的快捷键。
参数设置
单击每个参数小部件旁边的齿轮按钮,可以编辑设置: ·Title:默认情况下,参数的Title属性与查询文本中被花括号括起来的字符串相同,如果你需要将它改成一个更加友好的名字,您可以设置它; ·Type:每个参数都以文本类型为默认。这里你可以修改他的类型,支持的类型有:文本、数字、日期、日期和时间、日期和时间(带秒)和下拉列表;
Redash在版本7之前,查询编辑器的参数设置还有一个叫“Global”的复选框,他是为了可以在仪表板中可以复用多个查询的参数,从第六版开始,这个功能的实现方式被替换为仪表板上的参数映射功能。
出于安全原因,Redash用户必须具有对数据源的完全访问权限才可以使用文本类型的参数。所有用户都可以使用除文本类型外的其他类型参数。
##日期和日期范围参数
日期参数使用我们熟悉的日历选择界面,可以默认为当前日期和时间。您可以从三个精度来进行选择:日期、日期和时间以及日期和时间(带秒)。
日期范围参数需要插入两个参数,分别用.start
和.end
来标记,用来表示日期范围的开始和结束。
SELECT a, b c
FROM table1
WHERE
relevant_date >= '{{ myDate.start }}'
AND table1.relevant_date <= '{{ myDate.end }}'
日期参数作为字符串替换到查询语句中,因此,您应该用单引号(
'
)或者您通过数据库用于声明字符串的语句括起来, 虽然他是以文本形式传递的到数据库中的,但是他在共享的仪表板中仍然是安全的。
日期范围参数使用组合小部件来简化选择:
快速日期和日期范围选项
当你向查询中添加日期或日期范围参数时,选择小部件会提示一个蓝色的闪电图标。单击它可以查看动态值,例如“上个月”、“昨天”或者“去年”。这些都是动态更新的。
由于动态的日期和日期范围是在前端计算的,因此它们与计划查询不兼容。
下拉列表
如果要在运行查询时限制参数值的范围,可以使用Redash的下拉列表(Dropdown List)参数类型。 从参数设置面板中选择时,会出现一个文本框,您可以在其中输入允许的值,每个值用换行来分割。下拉列表的本质还是文本格式,所以当你的参数是日期的时候,您可以以数据库的要求格式添加到列表中。
基于查询的下拉列表
下拉列表也可以与现有的查询结果相关联。只需单击设置面板中的类型,选择“Query Based Dropdown List
“,在已经存在的查询中选择你需要加载的查询。
如果目标的查询返回大量的值,那么性能可能会下降。
如果您的目标返回多列,Redash会使用第一列,如果您的目标查询返回name
和value
时,Redash使用name作为前端显示的值,而value作为实际传递给数据库的值。【译者觉得非常有用,记个重点】
例如:这个查询:
SELECT user_uuid as `value`, username as `name`
FROM users
返回的结果是
value | name |
---|---|
1001 | John Smith |
1002 | Jane Doe |
1003 | Bobby Tables |
那么下拉列表的显示的将是:
但是替换的查询语句将是 1001、1002或1003。
多选下拉列表
下拉列表也可以是允许多选,只需勾选”允许多个值“的选项即可,你也可以选择是否将其用单引号或者双引号包裹。
在您的查询中,可以这样使用:
SELECT ...
FROM ...
WHERE field IN ( {{ Multi Select Parameter }} )
多选下拉列表可以使用重复的值
FAQ
可以在单个查询中复用相同的参数吗?
当然可以!只需要在大括号中使用相同的标识符即可,例如:
SELECT {{org_id}}, count(0)
FROM queries
WHERE org_id = {{org_id}}
我们使用了{{org_id}} 两次。
我可以在一个查询中使用多个参数吗?
当然可以 只需要为每个参数使用唯一的标识符即可,例如:
SELECT count(0)
FROM queries
WHERE org_id = {{org_id}} AND created_at > '{{start_date}}'
这里使用了两个参数”org_id“ 和”start_date“。
我可以在可视化和仪表板中使用参数吗?
可以,但一个例外情况: 如果查询使用的参数为文本类型:则无法在仪表板中使用他(因为这将会有SQL注入的风险)。所有其他类型的参数都可以在可视化和仪表板中安全使用。
在Redash v8版本之前,嵌入式可视化不允许使用参数。在未来的版本中,所有参数类型都将被允许用于公开分享的仪表板和可视化。
我可以通过修改URL来更改参数的值吗?
可以。每个参数都以p_
开头的形式出现在URL中,例如:
SELECT * FROM table WHERE field = {{param}}
那么就会有这样的链接:
https://xxxx.com/<slug>/queries/1234?p_param=100
这个对查询和仪表板之间的关联很有用。
仪表板上的参数映射
查询参数也可以在仪表板内进行控制。您可以将不同的小部件的参数链接在一起、设置静态参数,或为每个小部件单独选择值。
在添加依赖于参数值的小部件时,您可以选择所需的参数映射。基础查询中的每个参数都会出现在参数列表中。
您还可以点击仪表板小部件上的垂直省略号按钮,来访问参数映射界面。
· 标题(Title)是参数的显示名称,将出现在仪表板上的值选择器旁边,提示用户这个参数的含义。默认为参数关键字。通过单击铅笔按钮进行编辑。注意,如果是静态仪表板,不显示参数,因为选择器会被隐藏。如果您选择的是Static value
作为仪表板的参数类型,则标题会变灰。
·关键字(Keyword)是基础查询中的参数字符串。如果您的仪表板未返回预期结果,这对调试很有用。
·默认值(Default Value)如果未指定其他值,则默认值Redash将使用的值。要从查询编辑器更改此设置,使用所需的参数值进行查询,然后单击“保存”按钮。
·值源(Value Source)是您选择首选映射的地方。单击铅笔按钮以打开映射器设置。
值源设置
·新建仪表板参数:仪表板参数允许您在仪表板的一个位置设置参数值并将其映射到多个可视化。使用此选项可创建新的仪表板级参数。 ·现有仪表板参数:如果您已经设置了仪表板级参数。请使用此选项将其映射到特定查询参数。您需要指定将映射哪个预先存在的仪表板参数。 ·小部件参数:此选项将在仪表板小部件内显示一个值选择器。这对于不在小部件之间共享的一次性参数很有用。 ·静态值:选择此选项将使您为此小部件选择静态值,而不管其他小部件上使用的值如何。静态映射的参数值不会在更紧凑的仪表板上的任何位置显示值选择器。这使您可以利用查询参数的灵活性,而不会在预计某些参数不会频繁更改时使仪表板上的用户界面变得混乱。