文章目录 日期与时间函数 筛选器函数 逻辑判断函数 逻辑函数 统计函数 文本函数
日期与时间函数
1 . 计算年初至今累计- - TOTALYTD函数例如计算年初至今累计的销售金额:
[ 年累计金额] :=
TOTALYTD( [ 销售金额] , '日历年' [ 日期] )
[ 年累计截止金额] :=
TOTALYTD( [ 销售金额] , '日历年' [ 日期] , '日历年' [ 日期] < DATE( 2016 , 6 , 1 ) )
2 . 计算上一年/ 季度/ 月的销售额- - DATEADD函数
[ 上一年销售额] : =
CALCULATE( [ 销售金额] , DATEADD( '日历年' [ 日期] , - 1 , YEAR) ) - - YEAR可改为QUARTER, MONTH, DAY- - 将- 1 改为+ 1 则时间后移3 . 计算同比/ 环比
[ 上一年销售额] : =
CALCULATE( [ 销售金额] , DATEADD( '日历年' [ 日期] , - 1 , YEAR) )
[ 同比] : =
DIVIDE( [ 销售金额] - [ 上一年销售额] , [ 上一年销售额] )
[ 上一月销售额] : =
CALCULATE( [ 销售金额] , DATEADD( '日历年' [ 日期] , - 1 , MONTH) )
[ 环比] : =
DIVIDE( [ 销售金额] - [ 上一月销售额] , [ 上一月销售额] ) 4 . 计算两个日期之间间隔- - DATEDIFF
[ 时间间隔] : =
DATEDIFF( [ 开始日期] , [ 结束日期] , 'Y' ) - - 参数"Y" 换成"M" 或"D" , 则分别对应月和日- - 也可以改成HOUR, MINUTE, SECOND计算小时,分,秒5 . 其他日期时间函数:
DATE( 2009 , 7 , 8 ) - - 结果返回'2009/7/8 0:00:00'
DATEVALUE( "8/1/2009" ) - - 将文本形式的日期转换为日期时间格式的日期,结果返回'2009/8/1 0:00:00'
DATEADD( [ 日期] , 3 , DAY) - - 日期加减函数
EOMONTH( [ 日期] , 3 ) - - 返回指定月份数之前或之后的月份的最后一天的日期
EDATE( [ 日期] , 3 ) - - 返回在开始日期之前或之后指示的月数的日期
YEAR( ) , MONTH( ) , DAY( ) , HOUR( ) , MINUTE( ) , SECOND( )
NOW( ) - - 返回当前的日期时间 TODAY( ) - - 返回当前的日期
WEEKDAY( [ 日期] , 1 ) - - 一周中的第几天, 参数1 代表从星期日开始计数,参数2 代表从星期一开始计数参数3 代表从星期一开始计数,但到星期六结束
WEEKNUM( [ 日期] , 1 ) - - 一年中的第几周,1 代表从周日开始计数,2 代表从周一开始计数
筛选器函数
1. ALL, ALLEXCEPT, ALLSELECTED
ALL( table/ column) - - ALL用来清除整个表或某个字段的筛选条件,通常配合CALCULATE使用
ALLEXCEPT( table/ column) - - 删除表中除已应用于指定列的筛选器之外的所有上下文筛选器
ALLSELECTED( table/ column) - - 从当前查询的列和行中删除上下文筛选器,同时保留所有其他上下文筛选器或显式筛选器2. CALCULATE( < expression> , < filter1> , < filter2> ...)
- - Calculate可以应用在多个表Calculate使用AND 关系时可直接在条件间加必须引用同一列。Calculate中当“[列] = 固定值”这种筛选搞不定时,可用filter/ all/ values筛选器搭配使用3. FILTER( table, < filter> ) - - 返回值:只包含筛选行数据的表
- - 筛选时对表进行逐行扫描,计算量很大,所以选择筛选的表尽量为lookup表4. HASONEVALUE( < columnName> ) - - 将 columnName 的上下文筛选为只剩下一个非重复值时,将返回 TRUE 。 否则为 FALSE 。5. RELATED( < column> ) - - 将“一”端的列值添加到“多”端的表中RELATEDTABLE( < tableName> ) - - 将“多”端关联的表数据添加到“一”端的列上,返回的是一张表6. VALUES( < TableNameOrColumnName> ) - - 返回由一列构成的一个表,该表包含来自指定表或列的非重复值。 换言之,重复值将被删除,仅返回唯一值。7. EARLIER函数:例如我们有“产品名称”和“销售金额”两列数据。基于此,我们希望计算出每个产品的销售金额排名。COUNTROWS( FILTER( EARLIER( ) + 1 - - EARLIER= 当前行,按照当前行进行逐行扫描,SUMX+ FILTER+ EARLIER 是Power Pivot中比较常用的函数组合,由于Earlier针对每一行数据都进行计算,所以理论上计算量相当于数据行数的平方。如果有10 行数据,则需要计算100 次,所以数据量大的时候大家使用要小心,有可能会造成模型计算缓慢。
逻辑判断函数
1. CONTAINS( InternetSales, [ProductKey], 214 , [CustomerKey], 11185 ) - - 是否同时存在销售给客户 11185 的产品 214 的任何 Internet 销售额。
2. ISBLANK( column) - - 判断该列中某个值是否为空
3. ISNONTEXT( column) - - 检查某个值是否不是文本
4. ISNUMBER( column) - - 检查某个值是否为数字
5. ISTEXT( column) - - 检查某个值是否为文本
6. ISLOGICAL( column) - - 检查某个值是否是逻辑值
逻辑函数
1. IF ( logical_test> , < value_if_true> , value_if_false) - - 检查是否满足作为第一个参数提供的条件。 如果该条件为 TRUE ,则返回一个值;如果该条件为 FALSE ,则返回另一个值,用法与excel类似2. SWITCH( < expression> , 条件1 , 值1 , 条件2 , 值2 ) - - 根据值列表计算表达式,并返回多个可能的结果表达式之一。
统计函数
1. SUMX( table, < expression> ) - - SUMX与CALCULATE功能类似,但SUMX属于迭代函数,计算量大- - 同理AVERAGEX, MINX.MAXX用法相同
2. SUM( ) , MAX ( ) , MIN ( ) , SQRT( ) DISTINCTCOUNT( ) - - 计算去重后列所包含的元素个数COUNTROWS( ) - - 计算表的行数COUNT( ) - - 计算列中包含数字的单元的数目COUNTA( ) - - 计算列中不为空的单元的数目COUNTBLANK( ) - - 计算列中空白单元的数目3. DIVIDE( 分子,分母) - - 在DAX中涉及到除法必须用DIVIDE4. CROSSJOIN( < table1> , < table2> ) - - 生成笛卡尔积表SUMMARIZE( < table> , < groupBy_columnName> , < name > , < expression> ) - - table, 任何返回数据表的 DAX 表达式。groupBy_columnName将使用该列中找到的值创建摘要组, 此参数不能是表达式。name , 给予总计或汇总列的名称,包含在双引号内。expression, 任何返回单个标量值的 DAX 表达式,其中,表达式将计算多次(针对每行/ 上下文)。GENERATE( < table1> , < table2> ) - - 生成笛卡尔积表
文本函数
1. LEFT ( ) , RIGHT ( ) , MID ( ) , FIND( ) , SEARCH( ) , LEN ( ) - - - 字符串提取函数2. REPLACE( ) , SUBSTITUTE( ) - - 字符串替换函数3. TRIM( ) , LOWER( ) , UPPER( ) 4. FORMAT函数,对于日期格式的自定义设置如下图: