

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 将数据集参数插入自定义 SQL


通过在 SQL 语句中使用 `<<$parameter_name>>` 引用数据集参数，您可以在直接查询模式的数据集自定义 SQL 中插入数据集参数。运行时，控制面板用户可以输入与数据集参数关联的筛选条件控件值。然后，在值传播到 SQL 查询后，他们可以在控制面板视觉对象中看到结果。您可以根据客户在 `where` 子句中的输入使用参数创建基本筛选条件。或者，您可以添加 `case when` 或 `if else` 子句，以根据参数的输入动态更改 SQL 查询的逻辑。

例如，假设您要在自定义 SQL 中添加 `WHERE` 子句，以根据最终用户的区域名称筛选数据。在本例中，您将创建一个名为 `RegionName` 的单个值参数：

```
SELECT *
FROM transactions
WHERE region = <<$RegionName>>
```

您也可以让用户为参数提供多个值：

```
SELECT *
FROM transactions
WHERE region in (<<$RegionNames>>)
```

在以下更复杂的示例中，数据集作者根据可在控制面板筛选条件控件中选择的用户的名字和姓氏引用两个数据集参数两次：

```
SELECT Region, Country, OrderDate, Sales
FROM transactions
WHERE region=
(Case
WHEN <<$UserFIRSTNAME>> In 
    (select firstname from user where region='region1') 
    and <<$UserLASTNAME>> In 
    (select lastname from user where region='region1') 
    THEN 'region1'
WHEN <<$UserFIRSTNAME>> In 
    (select firstname from user where region='region2') 
    and <<$UserLASTNAME>> In 
    (select lastname from user where region='region2') 
    THEN 'region2'
ELSE 'region3'
END)
```

您还可以根据用户输入使用 `SELECT` 子句中的参数在数据集中创建新列：

```
SELECT Region, Country, date, 
    (case 
    WHEN <<$RegionName>>='EU'
    THEN sum(sales) * 0.93   --convert US dollar to euro
    WHEN <<$RegionName>>='CAN'
    THEN sum(sales) * 0.78   --convert US dollar to Canadian Dollar
    ELSE sum(sales) -- US dollar
    END
    ) as "Sales"
FROM transactions
WHERE region = <<$RegionName>>
```

要创建自定义 SQL 查询或在添加数据集参数之前编辑现有查询，请参阅 [使用 SQL 自定义数据](adding-a-SQL-query.md)。

使用数据集参数应用自定义 SQL 时，`<<$parameter_name>>` 将用作占位符值。当用户从控件中选择一个参数值时，Quick 会将占位符替换为用户在仪表板上选择的值。

在以下示例中，用户输入了新的自定义 SQL 查询，该查询按状态筛选数据：

```
select * from all_flights
where origin_state_abr = <<$State>>
```

参数的默认值应用于 SQL 查询，结果将显示在**预览窗格**中。