计算字段

功能简介

若原始的字段无法满足你的分析需要,你可以选择使用计算字段功能。 计算字段功能允许用户对原始字段进行一系列运算逻辑从而衍生出新的字段。计算字段分为两部分:计算维度与计算度量。得到的新字段与数据源中的维度和度量相同,也可以被使用在行列,属性面板以及筛选器中。

添加计算字段非常简单,用户可以在数模模型编辑界面或者报表编辑界面下,在维度栏和度量栏中点击“+”,并在弹出的对话框中使用支持的函数和已有字段的组合即可。可选择的函数均包含在对话框中右侧的函数介绍部分,函数名和字段名需要手动输入,报表编辑界面下也可以直接从左侧列表拖入字段。

你可以通过计算字段功能来完成 聚合运算、算术运算、逻辑运算、类型转换、分支判断、时间精度截断等,甚至还能用它实现简单的数据清洗。

在计算字段的编辑框右侧有帮助窗口。单击帮助窗口中列出的函数名称会显示出对应的介绍和示例,双击它则可以直接在编辑框中自动填入函数及需要的部分,用户也可以按照示例自己手动输入表达式。任何不合法的内容都将引发系统的自动提示。

已添加的计算字段也可以作为表达式再被使用在其他计算字段中。但若计算字段中所使用的其他字段(包括其他计算字段)失效,则该计算字段也将失效。

需要注意的是,字段名称在编辑框中是对大小写敏感的,因此,请保证填写的字段名称与已存维度度量的名称完全相同。此外,度量值和度量名称这两个字段属于特殊字段,无法在计算字段中使用。

基本规则介绍

语法

计算字段的编写需要满足一定的语法规则,这些规则的约束可以避免岐义,帮助你写出正确的表达式。当这些语法规则不被满足时,编辑器会提示 "语法错误"。

注意: 如果你使用中文输入法,请调整输入法选项以使用英文半角的标点符号,这样可以有效地减少语法错误。

引用字段名

在编辑计算字段的表达式时,通常会引用其它字段,被引用的字段既可以是原始字段, 也可以是其它的计算字段。如果被引用的字段名是由字母、汉字、数字组成的,不包含空格或特殊字符,则可以直接使用字段名,否则需要将字段名用方括号([])包裹起来。

以下是一些合法的字段名引用例子: 销量, sales, [销量], [销 量]

注意:字段名中的右方括号(])需要用两个连续的右方括号(]])替代。

常量字面值

除了引用其它字段,我们还经常用到一些常量。有数中支持直接书写数字、字符串以及布尔值常量。字符串常量需要用双引号(")包裹起来。

以下是一些常量字面值的例子:

  • 数字:1, 1.23
  • 字符串:"hello", "你 好"
  • 布尔值:true, false

注意:如果字符串的内容中包含双引号(")或反斜杠(\)则需要在它之前添加一个反斜杠用于转义;回车符可以用\n表示,制表符可以用\t表示。

运算符和条件语句

有数中支持常用的二元运算符,包括四则运算,比较运算,逻辑运算; 还支持IF表达式和CASE表达式用于条件判断,示例如下:

  • 四则运算:1 + 2 , 1 - 2 , 1 * 2 , 1 / 2
  • 比较运算:1 = 2, 1 > 2, 1 >= 2, 1 < 2, 1 <= 2, 1 != 2
  • 逻辑运算:([销量] > 1) and ([销量] < 10), ([销量] < 1) or ([销量] > 10)
  • IF表达式:if [销量] > 100 then [销量] else 0, if [值类型] = 1 then [值]
  • CASE表达式:case [类型] when 0 then "空调" when 1 then "电扇" else "其它"

注意: 以上运算符的优先级关系为 四则运算 > 比较运算 > 逻辑运算 > IF表达式 和 CASE表达式,其中乘除法的优先级高于加减法,如 1 + 2 * 3 等价于 1 + (2 * 3),若希望表示 1 和 2 先相加,再和 3 相乘,应写为 (1 + 2) * 3

函数调用

除了上述运算符和条件语句的支持外,有数中还支持大量的函数,你可以使用这些函数实现更复杂的计算逻辑,也可以用它们实现一些简单的数据清洗工作,你还能通过聚合函数(SUM, AVG, MIN, MAX, COUNT, COUNTD)对一列中不同行的数据进行聚合运算。函数可以通过 函数名(函数参数) 的形式调用,例如:

  • 使用普通函数:isnull([产品类别]), power(2, 10), datediff("day", [发货日期], [收货日期])
  • 使用聚合函数: sum([销量]), avg([销售额])

注意: 每个函数对其参数的参数个数,数据类型,聚合状态均有不同的要求,具体要求可以在表达式编辑器右侧的帮助窗口搜索和查看。

数据类型

有数支持六种数据类型,它们能准确地表达大部分逻辑。每个运算符和函数对其参数均有一定的类型约束,这些约束能帮助你避免一些明显的错误,从而帮助你写出正确的计算逻辑。通常只有当你的表达式编辑器提示你类型错误时,你才需要关注字段的类型。

以下是各种类型的表达式的示例:

  • 整数:0, 42, -1, 1 + 1
  • 小数:0.1, 3.1415926
  • 布尔值:true, false, 1 < 2
  • 字符串:"hello"
  • 日期:date("2016-04-01")
  • 日期时间:datetime("2016-04-01 16:04:01")

注意: 你能在字段列表中的每个字段左侧看到一个暗示该字段数据类型的小图标。

聚合状态

如果一个字段的表达式中直接或间接地包含聚合运算,则我们称其为 "已聚合" 的字段,否则称其为 "未聚合" 的字段。以下是两种字段使用上的差别:

  • 未聚合:未聚合的值可以用作维度,也可以在设置聚合方式后用作度量
  • 已聚合:已聚合的值只能用作度量,可以参与表计算,并且无法再次被聚合

注意:每个运算符和函数对其参数的聚合状态都有一定的约束,通常来说,大部分的多参函数均要求多个参数的聚合状态相同。

视图粒度

被拖动到面板(包括行,列和标记)中的所有维度构成一个维度集合,我们称之为 "视图粒度"。 在进行聚合运算的时候,数据将按照该维度集合中的维度的成员值进行分组,然后计算聚合结果。

注意:对于同样的度量表达式,当视图粒度不同时,计算结果也会不同。

以下结果符合搜索条件 ""

    没有结果符合搜索条件 ""