Power BI业务分析中,经常会遇到类似这样的问题,如何找到最新业务日期、如果找出最大订单对应的客户名称等,本文将大家经常问到的一些基础业务度量值的写法汇总如下,希望对你有所帮助。
这里以这个简易的订单表为例,
先写个基础度量值备用:
下面就来看看这些常见业务指标的度量值写法。
1. 最新业务日期
最新业务日期 =
MAXX(ALL('订单表'),'订单表'[日期])
利用MAXX从全部订单表数据中提取最大的日期。
2. 最早业务日期
最早业务日期 =
MINX(ALL('订单表'),'订单表'[日期])
利用MINX从全部订单表数据中提取最小的日期。
3. 最新业务日期下单的客户
最新业务日期下单的客户 =
CALCULATE(
MAX('订单表'[客户]),
FILTER(
ALL('订单表'),
'订单表'[日期]=[最新业务日期]
)
)
从订单表中筛选订单日期等于最新业务日期的行,然后利用MAX返回该行对应的客户名称。
这里假设结果只有一个客户,如果有多个客户,见下面的介绍。
4. 最新业务日期上一个交易日
最新业务日期的上一个交易日 =
CALCULATE(
MIN('订单表'[日期]),
TOPN(2,ALL('订单表'),'订单表'[日期])
)
利用TOPN筛选最大的两个订单日期,然后利用MIN取其中较小的日期。
5. 最新业务日期上一个交易日销售的产品
最新业务日期上一个交易日销售的产品 =
CALCULATE(
MAX('订单表'[产品]),
FILTER(
ALL('订单表'),
'订单表'[日期]=[最新业务日期的上一个交易日]
)
)
从订单表中筛选订单日期等于最新业务日期上一日的行,然后返回该行对应的产品名称。
6. 单笔最小订单对应的产品
单笔最小订单对应的产品 =
CALCULATE(
MAX('订单表'[产品]),
TOPN(1,'订单表',[销售额合计],ASC)
)
利用TOPN筛选订单金额最小的订单(TOPN最后一个参数ASC,按升序排列,获取最小值的行),然后利用MAX提取对应的产品名称。
7. 单笔最大订单对应的客户
单笔最大订单对应的客户 =
CALCULATE(
MAX('订单表'[客户]),
TOPN(1,'订单表',[销售额合计])
)
利用TOPN筛选订单金额最大的订单(TOPN最后一个参数省略,默认降序排列,获取最大值的行),然后利用MAX提取对应的产品名称。
8. 单笔第二大订单对应的客户
单笔第二大订单对应的客户 =
CALCULATE(
MAX('订单表'[客户]),
TOPN(
1,
TOPN(2,'订单表',[销售额合计]),
[销售额合计],
ASC
)
)
这里的主要逻辑是2个TOPN,内层TOPN返回销售额最大的2笔订单,然后外层的TOPN从其中筛选出较小的那一行。
9. 销售额最高的产品
销售额最高的产品 =
CALCULATE(
MAX('订单表'[产品]),
TOPN(1,VALUES('订单表'[产品]),[销售额合计])
)
利用TOPN找出销售额最高的产品行,然后利用MAX返回该行对应的产品名称。
10. 销售额最低的产品
销售额最低的产品 =
CALCULATE(
MAX('订单表'[产品]),
TOPN(1,VALUES('订单表'[产品]),[销售额合计],ASC)
)
利用TOPN找出销售额最低的产品行,然后利用MAX返回该行对应的产品名称。
但是如果你仔细查看每种产品的销售额,实际上销售额最低的有两种产品。
对于前面的度量值,都是假设不存在并列的情况,所以直接用了MAX函数,因为对于唯一的值,用MAX或者MIN函数都可以,都是返回这个值本身。
对于并列的情况,如果想随便返回任意一个,那么用MAX/MIN也可以,但是如果需要返回全部的名称,还可以用CONCATENATEX函数将所有的结果连接起来。
以销售额最低的产品为例,将这个度量值修改如下:
销售额最低的产品=
CALCULATE(
CONCATENATEX(
VALUES('订单表'[产品]),'订单表'[产品],
"/"
),
TOPN(1,VALUES('订单表'[产品]),[销售额合计],ASC)
)
当存在并列的情况时,你都可以参考最后这个度量值的写法,将并列的名称利用CONCATENATEX函数组合到一起,同时显示出来。
这里的示例都很简单,其实大多数的分析,抛开具体的业务背景,都是这些常用的逻辑,或者多个逻辑的组合,用的DAX函数也并不难,常用的就是这几个,灵活运用就可以解决日常遇到的大多数问题。
联系客服