变量

最近更新时间:2024-07-03 15:40:41

我的收藏
在业务场景中,需要将一个分析结果放到文本组件中(如日报场景)或者将数据提点放到组件标题中(如提炼当前统计周期的最佳员工名称),通过变量,用户可以在组件中引用数据分析结果。

腾讯云 BI 支持三种作用域变量,分别为:
页面变量:作用域为当前页面,在其他页面引用不生效;是主要的使用类型;
项目变量:作用域为当前项目里的任何页面,在其他项目引用不生效;主要用于定义项目共用信息,如项目的成功指标。
系统变量:作用域为当前整个组织的所有页面,主要用于定义团队共用信息,如获取用户名称用于水印展示场景等。

版本支持:专业版

本文介绍以下操作(本文以页面变量为例):
创建变量
引用变量
联动变量
变量结果格式化
语法说明


创建变量

创建变量需要如下步骤:
1. 入口:进入控制台 > 页面 > 编辑 > 变量


2. 定义变量信息:



单击“+新增”来增加一个变量;
输入引用名:新变量引用名“emp_total”用来统计员工总数;引用名称是最重要的参数,必须英文及下划线格式,在变量调用时,通过该名称进行引用;为了便于编辑时分辨,用户也可以自定义变量名称,但是引用时,依然要求使用引用名;
取值方式:变量值的获取方式,可以选择输入一个静态值,最常用的还是通过“快捷分析”来获取。
3. 设置变量取值
通过“快捷分析”,可以取得图表分析的结果,操作同图表编辑。下面以“获取当前员工数量”为例:



3.1 选择数据表:选择变量的来源数据表“BI 测试数据”;
3.2 选择需要分析的字段:
本例中获取员工数,可通过统计员工“名称”的计数来获得
将“名称”字段拖放到指标分析框中
选择聚合》去重计数,获得员工总数
3.3 立即分析:单击立即分析,获得数据结果,可以表格或者 json 的格式展示结果;



注意:
默认变量数据结果会取第一行的第1列,如果用户更换了数据表或者之前修改过“结果格式化”,可能导致变量出错,这时候可以切换到“结果格式化”页签,确认是否行列是正确的;用户可以自己对结果进行格式化,详见 变量结果处理

引用变量

变量将可以用在多种场景,如在文本组件中插入变量、在图表标题中插入变量等。变量的引用使用双花括号包裹,如”{{emp_total}}“。
1. 在标题中插入变量
1.1 打开页面 > 编辑组件 > 设置组件标题




1.2 插入变量:在样式面板里,找到标题设置,在标题需要展示的位置,输入变量引用名“{{emp_total}}”;
1.3 保存后查看变量解析结果。
2. 在文本组件中插入变量
2.1 在画布中创建文本组件;
2.2 输入文本内容,在需要替换的部分,插入变量 > 选择页面变量“{{emp_total}}”:



2.3 或者直接用花括号替换变量部分内容,如“{{emp_total}}”;
2.4 保存设置,查看变量是否被解析;对文本进行样式设置,如加粗等:



注意:
如变量解析失败,则呈现为文本,如“{{emp_total}}”;
如对变量部分进行样式设置,请务必选择一个完整的变量引用体,如“{{emp_toatal}}”,切不可选择“{{emp”,否则变量无法解析。

联动变量

在有筛选器的场景下,我们经常有需要根据筛选器的结果来分析变量的场景,如筛选出了部门为“测试组”,期望展示“测试组”的员工数,而不是所有部门的员工数,这时候我们需要使用到筛选器联动变量功能。



1. 创建筛选器,用于选择部门;
2. 设置筛选器联动变量:选择联动变量“emp_total”,以“部门”字段为条件关联;
3. 保存,选择部门“前端开发组”,可见“emp_total”会展示动态的数据值




变量结果处理

通过快捷分析处理后,我们将得到一个“表格”结果(response),通过指定行列可以取出“表格”里的数据值,原理如下图所示:



通过结果格式化,我们还可以设置结果返回的数据和格式:



入口:单击结果格式化进入格式化编辑,默认获取第一行的第一列;
格式化编辑区:主要的操作区域,可输入格式化函数,对结果进行处理;
参考函数区:系统提供了常用的操作函数,用户可现将光标定位在编辑器里的文本位置,然后单击函数,插入到光标位置;
结果输出区:用户可单击预览,在结果输出区查看当前输出的数据结果。

下面,将从几个常用场景,描述变量的结果格式化方法:
获取某一个单元格数据(如获取业绩最好的员工的业绩值)
文本格式化(如获取员工的姓)
数值格式化(如将数值展示为2位小数)
时间格式化(如日历里只展示当月天)
循环处理(如生成部门排名列表)
判断处理(如环比值低于0的标红)

1. 获取某一个单元格数据
最终效果:



操作步骤:
画布中添加一个文本组件:设置对应的样式,其中数值部分用变量引用“{{emp_max}}”;



添加变量:打开变量面板,新增一个“emp_max”页面变量,设置维度和指标;其中“产值”降序排列,方便获取排名第三的行;



结果格式化:打开结果格式化面板,获取第三行的“index_key_H_1”列(即员工产值列):



单击预览,查看结果为第三行的产值列的值。

2. 文本格式化(如获取员工的姓)
最终效果:



操作步骤:
画布中添加一个文本组件:设置对应的样式,其中数值部分用变量引用“{{emp_name}}”;
添加变量:打开变量面板,新增一个“emp_name”页面变量,设置维度和指标;其中产值进行倒序排列,以便获取产值最高的员工;



结果格式化:打开结果格式化面板,先通过 "response[0]['dim_key_A_1']"获得员工名称,在该值后面插入 格式化函数 “substrFunc”, 获取从第一个字母开始,取1个字(即姓);



单击预览,查看结果值;
在文本组件里,引用变量后,添加隐藏名字符号,如下:




3. 
数值格式化(如将数值展示为2位小数)

最终效果:



操作步骤:
画布中添加一个文本组件:设置对应的样式,其中数值部分用变量引用“{{emp_max}}”;
添加变量:打开变量面板,新增一个“emp_max”页面变量,设置维度和指标;其中产值进行倒序排列,以便获取产值最高的员工;



结果格式化:打开结果格式化面板,通过 "response[0]['index_key_H_1']"获得员工的产值(此时产值为7236000);
在文本组件里,引用变量,通过如下结果格式化,得到以万为单位的2位小数格式:



以上步骤也可以在变量编辑的结果格式化里进行,此处演示在引用时格式化,结果是一样的。

4. 时间格式化(如日历里只展示“月天”)
最终效果:



操作步骤:
画布中添加一个文本组件:设置对应的样式;
添加变量:打开变量面板,新增一个“income_day”页面变量,设置维度和指标;其中产值进行倒序排列,以便获取产值最高的日期;



结果格式化:打开结果格式化面板,如下编辑格式;



在文本组件里,引用变量“{{income_day}}”,查看效果。

5. 循环处理(如生成部门排名表)
最终效果:



操作步骤:
画布中添加一个文本组件:设置对应的样式;
添加变量:打开变量面板,新增一个“dpts”页面变量,设置维度和指标;其中产值进行倒序排列,以便获取部门排名;



结果格式化:打开结果格式化面板,如下编辑格式;



上图中,通过 map 函数对所有行进行循环遍历,每行的结果获取后,通过 join 将结果转化成文本,以便在引用时展示。
在文本组件里,引用变量“{{dpts}}”,查看效果。

6. 判断处理(如环比值低于0的标红)
最终效果:



操作步骤:
画布中添加一个文本组件:设置对应的样式;
添加变量:打开变量面板,新增一个“income_dep”页面变量,设置维度和指标;



上图中,设置了指标为员工产值,产值的日环比,其中日环比将用于判断当日对比上一日是否有所升降。

结果格式化:打开结果格式化面板,如下编辑格式;



上图中:
通过 map 函数对所有行进行循环遍历
每行的结果获取后,对“日环比”列值进行格式化,处理成2位小数的百分比格式;
设置一个 color 变量,用于对日环比颜色标注;根据“日环比”是否大于0,分别给 color 赋值;
返回每一行的文本,此处生成了每一日的值和环比值,其中使用了 html 元素“<span style=''></span>”对环比值进行修饰;
通过 join 将结果转化成文本,以便在引用时展示。
在文本组件里,引用变量“{{income_dep}}”,查看效果。
说明:
变量的结果格式化,除了在变量编辑时可以设置,也可以在引用时格式化,如前面介绍的 数值格式化 示例部分即是在文本组件引用变量时进行格式化,使用方法和效果是一致的。
具体在变量里格式化,还是在引用时格式化,可参考如下:
如果格式化很复杂的场景,如上面介绍的循环及判断,建议直接在变量编辑里格式化;
如果格式化不复杂,且只是取不同行列的值,则建议在引用时格式化。

下面举例在引用时格式化场景。
目标:在三个卡片里分别展示 最佳员工名称、所属部门、产值;
效果:



步骤:
在画布中,分别添加三个文本,并设置样式;
添加变量:打开变量面板,新增一个“good_emp”页面变量,设置维度和指标;其中产值设置为倒序排列,结果取1条;



结果格式化:打开结果格式化面板,获取结果的第一行(注意,这里是获取整行,而不是行列);



分给在文本组件中插入变量,并在变量格式里引用不同的数据列名称:





上图,分别获取了结果里不同列的值,如最佳员工取了“员工名称”列,最佳员工产值则取了“员工产值”列。

语法说明

腾讯云 BI 使用模板语言进行变量的获取和处理,语法基本和JS一致。
1. 获取分析结果
response 为原始数据结果,用户可以通过二维数组获取方式获取行列值:
{{response[x][y]}}
获取行:代码中的”x“代表行序号,从0开始,0代表第一行
获取列:代码中的”y“代表列 key,该 key 可以从表头中查看(该值为 string,需要单引号包起来),如下:


以“按照产值倒序,获取第三名员工产值”为例,可如下:
{{response[2]['key_G']}}
以上代码将获取到结果为“114000”。
2. 语法逻辑
2.1 逻辑计算:
//数学运算:支持js的数学运算符
{{a+b}}

//逻辑运算
{{ a || b}}

//if...else
{{if a>b }} 输出结果1 {{/if}}
{{if a>b }} 输出结果1 {{else if a>2*b}} 输出结果2 {{/if}}

// 三元运算
{{ a>b ? '输出结果1':'输出结果2'}}

// 循环,下例取出所有员工名称(response为整个表)
{{each response}}
第{{$index+1}}名:{{$value['key_A']}}
{{/each}}

// 循环还可以用内置的模板处理
{{ response.map((item) => {
return `<span style="color:red">${item['Key_A']}</span>`
})}}

2.2 使用内置格式化方法
腾讯云 BI 内置了部分标准函数,可以对结果进行快速的格式化,如对数值进行千分位处理等,目前腾讯云 BI 内置了以下格式化方法(详见产品界面):
// 百分号处理方法 percentageFunc
// 格式:{{percentageFunc A B C}},A表示小数位(默认2位),B表示千分位(默认不开启千分位),C表示进位方式(roundFive:四舍五入;roundUp:向上取整,roundDown:向下取整)
{{ response[0]['key_A'] | percentageFunc}}
{{ response[0]['key_A'] | percentageFunc 3 true 'roundFive'}}

//千分位处理方法 thousandsNumberFunc
// 格式:{{thousandsNumberFunc}}
{{ response[0]['key_A'] | thousandsNumberFunc}}

//日期处理方法 dateFormatFunc
// 格式:{{dateFormatFunc A}}, A为时间格式,默认'yyyy-MM-dd'
{{ response[0]['key_A'] | dateFormatFunc 'MM'}}
2.3 使用 js 语法
除了内置的格式化方法,腾讯云 BI 支持使用 js 语法处理数据结果,例如 string.substring() 方法,如下例通过 substring 方法获取月份
//设置临时变量temp
{{set temp = response[0]['key_A'].substring(5,7)}}
//如果10月以下去掉前面的0并展示月份
{{temp >= 10 ? temp : temp.substring(1) }}月