[]
        
在线Demo 免费试用
(Showing Draft Content)

表达式基本语法

1. 概述

1.1 功能概述

本节为您讲解表达式的语法。

2. 表达式介绍

2.1 表达式的语法形式

  1. 分析表达式采用表达式函数(参数1,参数2,……) 的简洁语法,支持多层嵌套调用,通过函数组合即可构建复杂业务逻辑计算,轻松实现各类数据分析需求。

2.2 表达式引用表和列

我们使用分析表达式来计算表中的数值,可以聚合、计算等,但最终所有的计算都涉及表和列。因此,要学习的第一个语法是如何引用表中的列。

  1. 分析表达式引用列的标准格式为 '表名'[列名](如:'订单'[利润]),其中:

    1)使用数据集时,所有数据存储于单一宽表;

    2)使用数据模型时,多表关联构成数据库,要求表名全局唯一,且每表的列名/计算列/度量值名称必须唯一,确保数据关系清晰可追溯。

type=info

注意: 表达式中的表名、列名等对象名称需严格区分大小写,必须与数据模型或数据集中的定义完全一致(仅关键字和变量名不区分大小写)。

3. 分析表达式常用词汇

3.1 计算列和度量值

  1. 计算列和度量值是分析表达式中两个最重要的词汇,我们最终也是通过计算列和度量值来表现计算结果。有关计算列和度量值的详细介绍,请见度量值和计算列

3.2 表

  1. 它可以是原始表也可以是通过分析表达式表函数返回的表。

  2. 通常它出现在聚合或窗口函数的第一个参数中。我们的仪表板将根据用户输入的查询数据使用表功能自动生成表。通常情况下,表函数使用时会层层嵌套,这意味着表函数的第一个参数也可以是表函数。

3.3 列

  1. 指来自数据库表的原始列。

3.4 上下文

  1. 它描述了分析表达式所处的环境,包括“行上下文”和“筛选上下文”。

  2. 在添加计算列时,我们能计算出某列在每一行的值,正是因为行上下文的作用。行上下文比较容易理解为当前行,但行上下文不仅仅适用于计算列,在度量值中也是适用的。我们知道在表达式中以 X 结尾的函数都是迭代函数,它们循环整张表并为每行计值一个表达式,最后使用不同算法来聚合结果。

    1)例如,在以下分析表达式中:

    [IncreasedSales] := SUMX ( Sales, Sales[SalesAmount] * 1.1 )

    2)SUMX 是一个迭代函数。它迭代整个销售表且每行都对销售金额按 10%加成来计值,最后返回所有这些值的总和。为了对每行计值该表达式,SUMX 对销售表创建了行上下文并用于迭代过程中,使得内层表达式(SUMX 的第二个参数)在包含了当前迭代行的行上下文中计值。

    3)筛选上下文可以理解为筛选表达式原表的数据。在 SQL 范围内,表示过滤条件或需要内连接的表。

3.5 表达式

  1. 它是分析表达式逻辑的一个单元,用于计算并返回结果。

  2. 表达式是通过使用模型或数据集对象(表、列或度量)、函数、运算符或常量构建的。通常,我们使用许多函数(聚合、窗口、表操作等)和许多运算符(算术、逻辑)来生成表达式。

3.6 函数

  1. 函数带有参数,可以向函数中传入参数。表达式可以使用许多函数调用,可能在其他函数中嵌套函数。在一个公式中,函数名称后面必须有圆括号。在括号内,传入参数。

4. 变量VAR

在表达式中定义变量,用来简化表达式,提高易读性。必须搭配 “return” 返回结果。

type=info

注意:

  • 为变量赋值后,不能二次赋值

  • 变量在度量值和计算列中均可使用。

4.1 语法

  1. 语法如下:

    var <name1> = <表达式1> 
    var <name2> = <表达式2>
    .....
    return <表达式3>

    type=info

    注意:

    1)变量名不可重复。

    2)语法中至少包含一组“var”、“return”。

4.2 说明

  1. 参数说明:

    参数

    定义

    name1、name2...

    变量名称。

    支持的字符集:a-z、A-Z、0-9、_。

    首位字符不能是0-9。

    <表达式1>、<表达式2>...

    计算表达式。

    表达式3

    返回标量或表值的表达式。

    注:

    1)表达式3可以不使用上述定义的变量。

    2)当表达式3使用变量时,必须使用上述定义的变量。

4.3 示例

  1. 示例通过计算当月销售额占全年销售额的份额来为您展示在表达式中使用变量有助于提高易读性,简化表达式。使用变量前:

     Divide(sumx(Filter('Sales', [month]=Month(today())),[price]*[quantity]),  sumx(Filter('Sales',[price]*[quantity]))
  2. 使用变量后:

    var thisMonthSales=Filter('Sales', [month]=Month(today()))
    var CurrentMonth_SaleAmount=sumx(thisMonthSales, [price]*[quantity])
    var ThisYear_SaleAmount=sumx(Filter('Sales',[price]*[quantity])
    return Divide(CurrentMonth_SaleAmount,  ThisYear_SaleAmount )