书写规则
直接引用列名称或重复引用其他度量值名称
例:度量值=CALCULATE([销售量],'产品表'[咖啡种类]="拿铁")
用单引号 ' 引用表,用中括号 [] 表示度量值或列
引用列:必须使用限定列 --> 明确所引用的是哪张表中的哪一列
引用度量值:不需要限定哪张表
换行:Shift+Enter 或 Alt+Enter
逻辑运算符
And:&&
Or: ||
函数公式
聚合函数 - 计算
Sum
例:[销售量]=Sum('销售数据表'[数量])
Average
例:[平均销售量]=Average('销售数据表'[数量])
Max
例:[最大销售量]=Max('销售数据表'[数量])
Min
例:[最小销售量]=Min('销售数据表'[数量])
Count
Countrows:求行的个数
CountA:计算列中单元格不为空的数目
Countblank:计算列中单元格为空白的数量
例:[订单数量]=Countrows('销售数据表')
Distinctcount
不重复计数
例:[门店数量]=Distinctcount('销售数据表'[门店])
Calculate函数
Calculate函数自带的筛选条件可以更改和覆盖初始的筛选条件
语法:Calculate(计算值,条件1,条件2,...)
例:拿铁中杯销售量=calculate([销售量],'产品表'[咖啡种类]="拿铁",'产品表'[杯型]="中")
表示“或”的并列条件
In函数+大括号
表示相反:Not in + 大括号
All函数
删除,扩大筛选条件范围
返回结果是表,需要配合calculate和countrows等可引用表的函数使用
例:All销售量=calculate([销售量],all('销售数据表'))
可以引用表,也可以引用列
必须保证All函数所清除的筛选列和初始筛选条件中的筛选列是同一张表同一列
所有引用列参数必须来自同一张表
若需引用多张表:All(), All(), All(), ...
多用于计算占比
Allexcept:除指定的某列之外,清除筛选条件
Allselected:清除所有显示的筛选条件;多用统计直观合计
Filter函数
筛选器函数,返回的结果是一张表
语法:FILTER('表',筛选条件')
常用句型
Filter ('表','表'[列]=公式)
Filter ('表','表'[列]=[度量值])
可设定筛选条件范围大于calculate函数
例:Filter销售量=calculate([销售量],filter('门店信息表',[销售量]>200))
尽量在Lookup表中使用
能用Calculate解决的一定不要使用Filter函数(计算量大)
Divide函数
语法:Divide (分子,分母)
安全除法:在分母为0时防止出现报错
“/”分母为0时结果为∞;Divide分母为0时结果为空值(可选)
图表会默认隐藏空值
If函数
语法:If (判断true,则,否则)
“否则”可省略
关系函数
Related
类似Vlookup
用于从“多”端匹配“一”端
例:产品名称=related('产品表'[产品名称])
例:收入=[数量]*related('产品表'[价格])
以表关联作为基础
Relatedtable
用于从“一”端匹配“多”端
返回的不是唯一值 --> 使用聚合运算
例:订单数量=countrows(relatedtable('销售数据表'))
Lookupvalue
可以对同时符合多个条件进行查询
可用于无关联的表
语法:Lookupvalue(目标输出结果列, 目标表中搜索的范围1, 资料表中的关联字段1, 目标表中搜索的范围2, 资料表中的关联字段2, ...)
例:Lookupvalue('产品表'[价格],'产品表'[咖啡种类],'销售数据表'[咖啡种类],'产品表'[杯型],'销售数据表'[杯型])
时间智能函数
要先有一张日历表
Date,年,月,周,年月,年周,星期几,季度,年季度
日历表排序
可在“添加日期列”添加辅助列
“表格”视图-选择某列-“按列排序”-选择按辅助列排序
定制日历表
给定制日历表添加一个不重复的ID列,同时保留标准日历表,按定制日历表ID给标准日历表设定ID
时间段函数
返回的都是一张表
DatesYtd
本年至今累计
语法:Datesytd('日历表'[日期], 截止日期(可选))
同理有Datesqtd(本季度累计)、Datesmtd(本月累计)
DateAdd
按照指定的间隔返回一个时间区间
语法:Dateadd('日历表'[日期列],间隔,间隔类型)
例:Dateadd('日历表'[日期], -1, year) --> 返回上一年的时间区间
可以以年、月、日为间隔单位
负数为往前朝向历史,正数为往后朝向未来
SamePeriodLastYear
与上年同期
与Dateadd('日历表'[日期], -1, year)运算结果相同
Previousmonth(day/quarter/year)
上一个月(日/季度/年)
返回的是完整的时间段
可能扩大原有上下文
Nextmonth(day/quarter/year)
下一个月(日/季度/年)
Datesbetween
指定开始和结束日期之间的时间段
语法:Datesbetween('日历表'[日期列], 开始日期, 结束日期)
Datesinperiod
根据某一时间节点来调整时间区间
语法:Datesinperiod('日历表'[日期列], 开始日期, 间隔, 间隔类型)
例:Datesinperiod('日历表'[日期],"2015-01-01",1,month) --> 以2015-01-01为起点,向后数1个月
时间点函数
用于指定某一个特定日期
返回一个有唯一值的表,这个值是某一个日期
Firstdate/Lastdate
求最早的日期
在引用列时,等于Min('日历表'[日期])
可以引用表(Min不可以)
例:度量值=Firstdate(All('日历表'[日期])
Endofmonth (quarter/year)
返回本月(季度/年)的最后一天
Startofmonth (quarter/year)
计算类函数
Values函数
返回由一列构成的一个表,该表包含来自指定表或列的非重复值
Hasonevalue函数
判断是否只有一个值
返回“真”或“假”
X类函数
行上下文函数
SumX
先计算,后对所有计算结果求和
例:销售额=SumX('销售数据表',[价格]*[数量])
对显示的数据求总计:SumX(Values('表'[列]),[度量值])
RankX函数
通过度量值输出排名
语法:RankX('表',算术表达式,值,顺序0或1,排序方法)
例:销售量排名=rankx(all('门店信息表'),[销售量])
排序方法
Skip(默认):并列时下一名跳过
Dense:并列时下一名紧接上一个名次数字
TopN函数
返回前N行的表
语法:TopN(前几名,想要提取的表,排序依据的度量值,升序/降序)
上下文
行上下文不会自动转换成筛选上下文 --> 如果需要转换,必须用Calculate函数
所有的度量值都自带Calculate函数的功能
分组
方法1:编辑查询器-添加列-条件列
方法2:IF、Switch函数
方法3:柱形图上直接选择分组
选择柱子 - 右键 - 分组 - 编辑组 - 修改名称
方法4:列上右键 - 新建组