本人Power BI小新一枚,因为工作的需要学习了解到了Power BI, 发现了她的强大之处,打算深入学习,将在这里记录下自己一些片面的学习理解,也帮助自己更快的成长:
刚刚学会了一些简单的DAX的应用,但是发现有时候需要通过定义变量的形式减少度量值的创建,并且使代码可用性提搞,开始摸索VAR的使用
目标是计算一个表格中每个省份的销售额占总的销售额比例
方法一:创建多个度量值,按顺序达成计算结果
/*1)各省销售额*/
销售额 =
sumx(
'销售订单',
'销售订单'[数量]*'销售订单'[单价]
)
/*2)全国销售额*/
总销售额 =
CALCULATE(
[销售额],
all('销售订单'[省份])//去除省份的上下文筛选
)
/*3)全国销售额*/
销售额占比 =
divide([销售额],[总销售额])
方法二:通过VAR创建一个度量值,完成上述操作
销售额占比2 =
var sales_2019 = [销售额]
// var total_2019 =
// CALCULATE(
// sales_2019,
// all('销售订单'[省份])
// )
var total_2019 =
CALCULATE(
[销售额],
all('销售订单'[省份])
)
return DIVIDE(sales_2019,total_2019)
注意的雷区:
- 上面这种方法里面,注释的部分没法使用,返回的并不是各个省份占全国的百分比,而都是100%,即自己比自己的结果
- 原因在于total_2019调用了sales_2019这个var,var此时相当于一个常量(这点很重要),即使在total_2019中加入了all的上下文筛选,此时的表格也是从sales_2019来的筛选过的固定表格。
- 因此要想达到方法一的效果,total_2019还是需要重新用一个独立的筛选上下文,如上面代码所示
因此VAR在日常中的应用可以涵盖到如下几个部分
1)通过VAR变量的语法,从而能够代替DAX中的筛选条件,做到简化DAX代码;
2)通过VAR变量命名,创建定义一张虚拟的列表或表;
3)通过VAR变量命名,定义需要的值列表,并分别放置于“不同的计算筛选环境"里来构建DAX的一个个逻辑条件(类似于EARLIER()函数的“当前行”),然后将这些条件按条件步骤组装成一个复杂的计算逻辑条件。
//举例说明:计算各省市的帕列托占比
帕列托占比 =
var current_sales =[销售金额]
var accum_sales =
CALCULATE(
[销售金额],
filter(
all('销售订单'[省份]),
[销售金额]>=current_sales
)
)
var total_sales = CALCULATE(sum('销售订单'[金额]), all('销售订单'[省份]))
return divide(accum_sales,total_sales)