参数编写方法

### 使用场景 #

- 需要使用图表联动效果
- 数据服务接口开发

### 使用魔法方法(smartchart独创,拒绝抄袭) #

#### 基础原理 #

     1. $参数名 : 当有传递参数时将替换相关的值
     2. /* ... $参数名 ... */ : 当参数写在这个区间时, 如果外部没有传入参数, 会自动忽略这一段代码
     3. -- : 标识之后单行的代码会被忽略

#### 常见组合应用 #

理解以下样列后, 可录活使用组合出各种可能的需求

- 默认参数: 实现在不传参数时默认参数是当前月份

    select xx from tablename where
    calmonth =/*'$calmonth' -- */ to_char(sysdate,'YYYYMM')

- 多个参数: 注意使用1=1及and的位置

    select xx from tablename where 1=1 /* and city = '$city' */
    /* and calmonth ='$calmonth'*/

- 维度变化: 将字段当成参数

    select /*$calmonth,*/ city, count(1) as qty from tablename
    group by /*$calmonth,*/ city

- 维度变化: 当传入月份条件时, 按城市,月份的数据, 不传参数时只看按城市的总数

    select /*月份, -- $Month */
    城市, sum(度量) from tablename
    where 1=1
    /* and 月份 > '$Month' */
    group by 城市
    /*,月份 -- $Month*/

#### 高级开关应用 #

以上应用可以通过参数是否有传递来实现开关代码段的效果, 有些场景可能还希望通过参数值来进行代码段的开关 如下代码可以实现当传递参数type=1 或 type=2 时执行不同的代码段 使用 “$参数__值” 的方式做为开关

    /* select count(1) as qty from tablename1  $type__1*/
    /* select count(1) as qty from tablename2  $type__2*/

再比如 当参数D传值为"月份"时是统计2022年按月的统计, 传"日期"时统计的是2022年10月按天的统计

    select $D, count(1) as qty from tablename
    where 1 = 1
    /* and year='2022'    -- $D__日期  $D__月份 */
    /* and month='10'     -- $D__日期 */
    group by
    $D

> 加了"–“是为了避免语法错误

### 数据集开发调试参数方法 #

对于开发人员来说, 带参数的SQL调试不方便, 所以支持你在sql中写入默认参数 方法如下格式, 你可以在sql编辑器的最上方写上 /* {xxxxxx} */, 会默认在开发调试模式下取这些参数, 在用户模式下会忽略

    /* {"月份":"202009","城市":"中山"} */
    select xxx from table xxx

### 数据权限行级别控制 #

- 当你在sql查询中加上’$username’, 会自动替换成登录用户的用户名
- 如果你是嵌入到第三方系统, 你可以通过url传递参数id, 在后台会转化为参数_id, 在sql中配置$_id即可控制数据权限
- 可以采用此做数据权限关联后台权限mapping表进行数据权限控制实现不同人看不同的数据

### 参数的传递方式 #

- 你可以从url传入参数, 在url上加入 &param={“参数名”:“参数值”}
- 在图形联动的点击过程中会自动传递参数， 具体参考联动相关文档

> TIPS 当设定参数后, 联动过程dataset的缓存功能失效, 所以不要让带参数的查询设计得太慢 参数如果存在一些非法字符可能会有问题, 比如参数中不可以有#号