目录
一、 基本的一些函数
1、 RELATED 从多端出发,按关系取一端的值(返回列值)
2、RELATEDTABLE 从一端出发,按关系取多端的值(返回表)
3、COUNT(不去重)与DISTINCTCOUNT(去重)
二、日期函数
1、date函数 转换一个指定日期
2、year/month/day/hour/minute/second 返回一个日期指定部分
3、DATEVALUE 转换文本到日期
4、edate日期加减月份
5、eomonth返回指定日期月份最后一天日期
6、now返回当前日期与时间
7、time返回时间
8、today返回今天的日期
9、weekday 返回日期是所在周的第几天
10、weeknum 返回日期是所在年的第几周
11、yearfra返回两个日期之间 天数/年数(365)(精确到小数)
三、智能日期函数
1、CALENDAR 创建日期表
2、CALENDARAUTO 创建日期表
3、FORMAT 函数打印格式
4、DATEADD 求同期
5、DATESYTD、DATESMTD 求YTD、MTD
6、PARALLELPERIOD 求上年全部,上月全部
7、divide 安全除法
8、ADDCOLUMNS 函数 为指定表添加列
9、IF函数
10、SWITCH函数
11、ISBLANK、BLANK
12、LEFT(),MID(),SEARCH() 字符串提取
13、UNICHAR 返回给定数字代表的 Unicode 字符
14、REPT 按给定次数重复文本
退货状态 = RELATED('退货'[退回] )
可以用 COUNTROWS 统计有几条对应的订单表的数据
对应订单表数据有几条 = COUNTROWS( (RELATEDTABLE('订单') ))
订单id不去重 = COUNT('订单'[订单ID] )
订单id去重 = DISTINCTCOUNT('订单'[订单ID] )
date转换一个指定日期 = date(2021,01,01 )
day取日期的日 = DAY('日期'[日期])
DATEVALUE转换文本到日期 = DATEVALUE("2020-01-01")
edate日期加减月份 = EDATE("2020-05-01",-4)
eomonth返回指定日期月份最后一天日期 = EOMONTH("2022-04-08",-1)
now返回当前日期与时间 = NOW()
time返回时间 = TIME(12,56,61)
today返回今天的日期 = TODAY()
语法=
WEEKDAY(<日期>, <返回类型>)
返回类型选项有1、2、3。
1代表周日是本周的第一天,周六为最后一天;
2代表周一是本周的第一天,周日为最后一天;
3代表周一是本周的第一天,周日为最后一天。与2类型返回的区别是在2中,返回结果是1-7。3类型中,返回结果是0-6。
weekday = WEEKDAY("2022-04-08",2 )
语法=
WEEKNUM(<日期>, <返回类型>)
返回类型选项有1、2。
1代表每周的第一天是周日。
2代表每周的第一天是周一。
weeknum = WEEKNUM("2022-04-08",2)
yearfra = YEARFRAC("2000-02-12",today())
CALENDAR创建日期表 = CALENDAR("2011-01-01","2016-01-01")
CALENDARAUTO创建日期表 = CALENDARAUTO()
format打印YM = FORMAT('日期'[日期],"YYYYMM")
前一天订单销售额 = CALCULATE([订单总销售额],DATEADD('日期'[日期],-1,DAY))
上月同期销售额 = CALCULATE([订单总销售额],DATEADD('日期'[日期],-1,MONTH))
上年同期销售额 = CALCULATE([订单总销售额],DATEADD('日期'[日期],-1,YEAR))
YTD = CALCULATE([订单总销售额],DATESYTD('日期'[日期]))
MTD = CALCULATE([订单总销售额],DATESMTD('日期'[日期]))
上年全部销售额 = CALCULATE([订单总销售额] ,PARALLELPERIOD('日期'[日期],-1,YEAR))
上月全部销售额 = CALCULATE([订单总销售额] ,PARALLELPERIOD('日期'[日期],-1,MONTH))
语法 =
divide(分子,分母,[可选项])
若不指定可选项,当分母为0时,返回空。
也可指定可选项,当分母为空时返回指定值。
语法
ADDCOLUMNS 函数 第一个参数是一个返回的表
第二个参数和第三个参数确定添加的第一例的列名和列值
第四个参数和第五个参数确定添加的第2例的列名和列值
以此类推
Calendar = ADDCOLUMNS(CALENDARAUTO(),
"YEAR",FORMAT([Date],"YYYY"),
"MONRH",FORMAT([Date],"MM"),
"Quetar","Q"&FORMAT(''[Date],"Q"),
"MONTH",FORMAT([Date],"MM"),
"WEEK",FORMAT([Date],"WW"),
"WK","WK"&" "&FORMAT(''[Date],"WW-YYYY"))
语法:if(条件,真的结果,假的结果)
1.省略第三参数,不符合条件时返回空值
Price Group =
IF(
'Product'[List Price] < 500,
"Low"
)
2.不省略第三参数
Price Group =
IF(
'Product'[List Price] < 500,
"Low",
"High"
)
3.嵌套if函数
Price Group =
IF(
'Product'[List Price] < 500,
"Low",
IF(
'Product'[List Price] < 1500,
"Medium",
"High"
)
)
语法:SWITCH(表达式,条件1,结果1,条件2,结果2,....)
参数:
第一参数:返回单个标量值的任何 DAX 表达式,其中,表达式将被计算多次(针对每行/上下文)
第二参数:与表达式的结果相匹配的常量值
第三参数:当表达式的结果与对应的值匹配时,要进行计算的任何标量表达式
第四参数:如果表达式的结果与任何值参数都不匹配,要进行计算的任何标量表达式
备注:
所有满足表达式的返回结果必须为同一数据类型
当存在多条件判断时,SWITCH函数比IF函数更加简洁明了
1.值相等
SWITCH([Month],
1,“Jan”,
2,"Feb",
3,"Mar",
4,"Apr",
"Other")
2.其他条件判断
SWITCH(TRUE(),
[Month]<=3,"一季",
[Month]<=6,"二季",
[Month]<=9,"三季",
"四季")
ISBLANK(column) --判断该列中某个值是否为空
语法
BLANK ( )
返回值
标量 一个任意类型的值,空值没有数据类型。
aaa=
IF( ISBLANK ([PreviousYearTotalSales]),
BLANK(),
( [Total Sales]-[PreviousYearTotalSales] ) / [PreviousYearTotalSales]
)
left
语法= LEFT ( <文本>, [<字符数>] )
例子
AAA =LEFT('New Products'[ProductCode],2)
mid
语法= MID ( <文本>, <起始位置>, <字符数> )
例子
MID("abcde",2,3)) = "bcd"
MID('Reseller'[ResellerName],1,5))
SEARCH
语法 =
SEARCH ( <待查找内容>, <查找范围>, [<起始位置>], [<备选结果>] )
例子
以下公式查找字符“-”在列中的位置,并在找不到该字符串的情况下返回 -1
SEARCH("-",[PostalCode],,-1)
语法=
UNICHAR ( <数字> )
例子
=UNICHAR(9733) //返回由 Unicode 数字 9733 表示的字符 ★
=UNICHAR(128504) //返回由 Unicode 数字 1285046 表示的字符 √
=UNICHAR(128500) //返回由 Unicode 数字 1285000 表示的字符 ×
语法 =
REPT ( <文本>, <重复次数> )
例子
REPT("85",3) = "858585"
备注
如果重复次数为 0,REPT 返回空白 。
如果重复次数 不为整数,则截断该值 。