📅  最后修改于: 2023-12-03 14:41:02.308000             🧑  作者: Mango
DAX(Data Analysis Expressions)是一种用于分析数据的语言,它是Microsoft Power Pivot、SQL Server Analysis Services(SSAS)Tabular模式和Power BI的关键组件之一。DAX使得您可以从现有关系式中创建计算列和计算字段(或称为“度量”),并支持许多用于数据分析的函数。在DAX中,计算是在基于特定上下文而非单个单元格中完成的。
DAX的上下文是执行计算的环境,在DAX中,有两种上下文:行上下文和过滤上下文。在编写DAX公式时,请务必理解当前上下文以及如何使用它来访问您的数据和计算。
行上下文是指DAX公式正在处理的当前行。在行上下文中,您可以使用相关函数来计算当前行的值,例如:各种X相关函数,还可以访问当前行的相关列。
以下是一个简单的例子来说明行上下文的工作原理:
假设您有一张包含以下列的销售数据表:
| 产品 | 城市 | 销售额 | | --- | --- | --- | | 产品1 | 上海 | 200 | | 产品1 | 深圳 | 300 | | 产品2 | 上海 | 150 | | 产品2 | 深圳 | 250 |
现在,您需要编写一个公式,计算每个产品的总销售额。在DAX中,您可以使用SUMX函数来完成此任务:
=SUMX(Sales,[Sales Amount])
Sales是销售数据表的名称,[Sales Amount]是销售额列的名称。在此公式中,SUMX函数在每个产品的行上下文中循环,因此它会将每个产品的销售额加起来并返回总和。
过滤上下文是基于在报表或图表中应用的过滤器来执行的。过滤上下文包含了所有过滤器中已选择的维度。例如,如果您已选择城市为“上海”,并在图表中查看“产品”与“销售额”的数据,则过滤上下文将包含城市维度的过滤器,并且将限制结果集仅包括在“上海”城市销售的产品和销售额。
以下是一个简单的例子来说明过滤上下文的工作原理:
假设您有一张包含以下列的销售数据表:
| 产品 | 城市 | 销售额 | | --- | --- | --- | | 产品1 | 上海 | 200 | | 产品1 | 深圳 | 300 | | 产品2 | 上海 | 150 | | 产品2 | 深圳 | 250 |
您需要编写一个公式,计算在城市为“上海”时每个产品的总销售额。在DAX中,您可以使用CALCULATE函数来完成此任务:
=CALCULATE(SUM(Sales[Sales Amount]),FILTER(Sales,Sales[City]="上海"))
在此公式中,CALCULATE函数将当前上下文的值传递给SUM函数,然后SUM函数会将城市为“上海”的销售额加起来并返回总和。
在DAX中,上下文是非常重要的概念,理解它的工作原理对于编写有效的DAX公式至关重要。行上下文和过滤上下文是两种不同的上下文类型,在编写公式时,您需要理解当前上下文以及如何使用它来访问您的数据和计算。