wangjuju123

2018-11-01   阅读量: 1845

数据分析师 Power BI

DAX 表达式

扫码加入数据分析学习群

主要用于创建度量列(Measure),度量值是根据用户选择的Filter和公式,计算聚合值,DAX表达式基本上都是引用对应的函数,函数的执行有表级(Table-Level)上下文和行级(Row-Level)上下文之别;其交互行为都是通过表之间的关系实现的,用户选择的Filter,会通过关系对数据进行过滤,是PowerBI报表呈现的数据具有动态交互的特性。

一,常用的操作符

在DAX表达式中,常用的操作符是:

  • 文本使用双引号作为界定符,
  • 等号是“=”号,不等号是:<>
  • 赋值使用“=”号,
  • 布尔值使用 TRUE()和FALSE()函数,
  • 空值使用BLANK()函数表示,
  • 集合使用大括号{}表示,例如,包含三个item的集合: {1,2,3}
  • 字符的连接符号是:&
  • 逻辑运算符号是:逻辑与是 &&,逻辑或是: ||

二,过滤函数

过滤函数能够操作数据的上下文,以实现数据的动态计算,功能非常强大。

1,关联函数

 Related函数返回跟当前的数据行有关系的表的单个值,

RELATED(related_table[column])

Related函数要求当前表和关联表之间存在关系(Relationship),当前表和关联表之间存在many-to-one的关系,从关联表中返回单个值。

Related函数运行在行上下文(row context),因此,只能用于计算列的表达式。

示例:表InternetSales_USD和SalesTerritory之间存在关系,从表SalesTerritory获取SalesTerritoryCountry的值,并通过FILTER函数进行过滤,统计表InternetSales_USD中字段[SalesAmount_USD]的加和:

= SUMX(FILTER( 'InternetSales_USD', RELATED('SalesTerritory'[SalesTerritoryCountry]) <>"United States" )  ,'InternetSales_USD'[SalesAmount_USD]) 

RELATEDTABLE用于one-to-many的关系,用于返回被过滤的所有数据行组成的表。

2,过滤函数

Filter函数,返回被过滤之后的表,是表数据的子集:

FILTER(<table>,<filter>)  

通过过滤条件,获取表的子集,过滤函数返回的表只能用于计算。过滤函数不是独立的,必须嵌入(embedded)到其他函数中作为一个表值参数。

3,计算函数

Calculate函数,在过滤器的上下文中计算表达式,返回单个值:

CALCULATE(<expression>,<filter1>,<filter2>…)  

参数expression是计算的表达式,受到filter参数的上下文的影响,如果filter参数改变数据的上下文,那么在新的上下文中计算表达式。计算函数的最大特点是能够移除过滤器,在过滤器参数列表中,如果一个数据列上存在多个过滤器,那么Calculate函数会移除前面的过滤器,而只应用当前的过滤器。

对于Calculate函数的Filter,有两种表达式,一种是布尔表达式,计算的结果是布尔值;一种是只包含一列的表格表达式,是指计算该表格相关联的数据,相当于做“相等”过滤。

示例:在计算比例关系时,使用计算函数的移除过滤器的功能:

=( SUM('ResellerSales_USD'[SalesAmount_USD]))    
/CALCULATE( SUM('ResellerSales_USD'[SalesAmount_USD])
,ALL('ResellerSales_USD'))

表达式中的分母,使用计算函数,其中,第一个过滤器参数使用ALL过滤函数,使得sum表达式统计所有的数据行,这种行为重写对数据表的隐式过滤器。

4,移除过滤器

ALL函数返回表中的所有数据行,清理任意过滤器,用于对全表执行聚合运算。ALL函数主要用于计算比例关系,常用于分母中。

ALL( {<table> | <column>)

5,去重函数

Distinct 返回单列的表,包含无重复的值,也就是说,从表中移除重复值,只返回列的唯一值。

DISTINCT(<column>) 

6,过滤器的值

函数Values返回被过滤的唯一值,在同一个表中的其他Column被过滤,那么返回被过滤的当前Column的唯一值。Values函数和Distinct函数很相似,唯一的不同是Values函数会返回Unknown,这是因为关联的Table中包含部匹配的数据行,和Left Join的右表中包含NULL值很相似。

VALUES(<TableNameOrColumnName>)  

When you use the VALUES function in a context that has been filtered,  the unique values returned by VALUES are affected by the filter.

结合CONCATENATEX函数,能够把所有过滤器的值连接成字符串。注意,DAX表达式使用 & 进行字符串的连接。

7,探测直接过滤(filtered directly)

如果指定的Column被直接过滤(filtered directly),函数返回True;当同一个Table中的其他Column被过滤,切片器(Slicer)中被关联的Column,默认设置是全部直接过滤,函数返回True;如果Column上没有直接的过滤,或者同一个Table中的其他Column被过滤,或者被有关系的Table过滤,函数返回False

ISFILTERED(<columnName>)  

直接过滤器的数值通过函数Filters返回:

FILTERS(<columnName>)

8,探测关联过滤

如果同一个Table中的其他Column被过滤,或者被有关系的Table过滤,函数返回True

ISCROSSFILTERED(<columnName>)  

9,保持过滤器

函数 KeepFilters 的作用是保持过滤器,用于计算函数(CALCULATE 和 CALCULATETABLE)中。默认情况下,计算函数的过滤器参数(filter argument)会对过滤表数据,当在相同的字段上设置过滤器参数(filter argument)时,该参数会替换已经存在的过滤器;当相同的字段上没有过滤器参数(filter argument)时,已经存在的过滤器不受影响。函数KeepFilters会改变计算函数的行为,当在计算函数使用函数KeepFilters时,表的上下文是过滤器参数(filter argument)和已经存在的过滤器的交集,也就是说,表的上下文同时受到已经存在的过滤器和计算函数的过滤器参数(filter argument)的影响。计算函数替换已经存在的过滤器,而函数 KeepFilters会添加已经存在的过滤,求交集。

KEEPFILTERS(<expression>) 
添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
0.0000 0 3 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子