[{"id":"840f0737-df1d-47ae-bb0a-359b01fe0608","tags":[{"product":null,"links":null,"id":"adf72f47-7f61-4239-8392-b9bcc127fa80","name":"\u65B0\u589E","color":"green","productId":"0995490e-43fc-4d6e-bc8d-8e66f38b0c63"}]},{"id":"d5d9cdef-8854-4505-89be-a2bbc3cb4482","tags":[{"product":null,"links":null,"id":"adf72f47-7f61-4239-8392-b9bcc127fa80","name":"\u65B0\u589E","color":"green","productId":"0995490e-43fc-4d6e-bc8d-8e66f38b0c63"}]},{"id":"3dc3dd55-35b0-4d23-bf62-47bc3650e4ee","tags":[{"product":null,"links":null,"id":"adf72f47-7f61-4239-8392-b9bcc127fa80","name":"\u65B0\u589E","color":"green","productId":"0995490e-43fc-4d6e-bc8d-8e66f38b0c63"}]},{"id":"80d84fbc-d0f8-4e4a-947f-e3e4de9b49b2","tags":[{"product":null,"links":null,"id":"adf72f47-7f61-4239-8392-b9bcc127fa80","name":"\u65B0\u589E","color":"green","productId":"0995490e-43fc-4d6e-bc8d-8e66f38b0c63"}]},{"id":"9152b7ca-0186-4fe3-a26f-5a05f322db07","tags":[{"product":null,"links":null,"id":"adf72f47-7f61-4239-8392-b9bcc127fa80","name":"\u65B0\u589E","color":"green","productId":"0995490e-43fc-4d6e-bc8d-8e66f38b0c63"}]}]
        
(Showing Draft Content)

表达式基本语法

表达式的语法形式

首先来看分析表达式的一般表现形式:

表达式函数(参数1,参数2,……)

分析表达式是通过函数来串联的,函数由函数名和参数构成,可能有多个参数。

表达式函数的参数可以是另一个分析表达式,通过嵌套分析表达式来表示非常复杂的业务逻辑从而完成现实中需要的某种计算。

引用表和列

我们使用分析表达式来计算表中的数值,可以聚合、计算等,但最终所有的计算都涉及表和列。

因此,要学习的第一个语法是如何引用表中的列。

引用列的一般格式是将表名用单引号括起来,后跟方括号中的列名,如下所示:

'订单'[利润]

表示对'订单'表的'利润'这一列的引用。

关于名称的规定:

使用数据集的话,所有数据在一张大表当中。

而使用使用模型时,一个数据模型通常包含多个表,这些表和表中的列一起构成了存储在数据库服务器中的数据库。

在该数据库中,所有的表名必须唯一。每个表中的列名也必须是唯一的。

添加到现有数据模型的计算列和度量值也必须属于特定表。表中的原始列/计算列/度量值名称也必须是唯一的。

注意

关于大小写的规定:

在表达式中,除关键字和变量名外,其他对象均大小写敏感(如引用表名、列名时要和模型或数据集上严格保持一致)。

分析表达式常用词汇

计算列和度量值

计算列和度量值是分析表达式中两个最重要的词汇,我们最终也是通过计算列和度量值来表现计算结果。

有关计算列和度量值的详细介绍,请见度量值和计算列

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

通常它出现在聚合或窗口函数的第一个参数中。我们的仪表板将根据用户输入的查询数据使用表功能自动生成表。

通常情况下,表函数使用时会层层嵌套,这意味着表函数的第一个参数也可以是表函数。

来自数据库表的原始列。

上下文

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

在添加计算列时,我们能计算出某列在每一行的值,正是因为行上下文的作用。

行上下文比较容易理解为当前行,但行上下文不仅仅适用于计算列,在度量值中也是适用的。

我们知道在表达式中以 X 结尾的函数都是迭代函数,它们循环整张表并为每行计值一个表达式,最后使用不同算法来聚合结果。

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

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

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

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

表达式

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

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

函数

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

变量VAR

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

注意:

  1. 为变量赋值后,不能二次赋值

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

语法

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

type=warning

注意:

  1. 变量名不可重复。

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

说明

参数

定义

name1、name2...

变量名称。

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

首位字符不能是0-9。

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

计算表达式。

表达式3

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

注:

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

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

示例

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

使用变量前:

 Divide(sumx(Filter('Sales', [month]=Month(today())),[price]*[quantity]),  sumx(Filter('Sales',[price]*[quantity]))

使用变量后:

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 )