1、X系列函数
我们常见的一些函数如:SUM、AVERAGE、COUNT......,当他们后面跟上X,会出现什么样的变化呢?
SUMX('表','表达式')函数,返回为表中的每一行计算的表达式的和;
AVERAGEX('表','表达式')函数,返回为表中的每一行计算的表达式的平均值;
COUNTX('表','表达式')函数,
在对
表上的表达式求
值时
,
对
包含非空白
值
的行数或
计
算
结
果
为
非空白
值
的表达式
进
行
计
数。
2、earlier函数
earlier函数,返回所述列的外部计算传递中指定列的当前值
注意:
EARLIER 的 执 行速度可能比 较缓 慢,因 为 从理 论 上 讲 ,它可能需要 执 行大量操作,操作次数接近于 总 行数 (列中)乘以相同数字(具体因表达式的语 法而异)。 例如,如果列中有 10 行, 则 可能需要大 约 100 次操 作;如果有 100 行, 则 可能会 执 行接近 10,000 次操作。
3、VAR函数
编写 DAX 表达式时,可以通过使用变量避免重复书写相同的表达式。变量在被定义的计值上下文中计算,而不在使用它们的环境中计算,一旦变量被计算,它的值就不在变化,在定义变量时要用VAR这个函数定义
4、案例:求出每个商品的累计销量
首先,按照SUMX('表','表达式')函数,先确定表,首先把商品编码给筛选出来,利用filter函数生成需要的表,即:表 = filter(‘销售明细’,‘销售明细’[销售编码] = EARLIER(‘销售明细’[销售编码] ))
然后,确定筛选条件,开始筛选日期,让当前日期小于等于日期,筛选条件 = ‘销售明细’,‘销售明细’[日期] <= EARLIER(‘销售明细’[日期] )
接下来,filter(表,筛选条件)
最后套进SUMX中,即:
累计销量 =
SUMX(
FILTER(
FILTER(
'销售明细',
'销售明细'[商品编码] = EARLIER('销售明细'[商品编码])
),
'销售明细'[日期] <= EARLIER('销售明细'[日期])
),'销售明细'[销售数量]
)
当用VAR函数时,程序应该这样写
累计销量 =
VAR SKU_bm = SELECTEDVALUE('销售明细'[商品编码])
VAR date_buy = SELECTEDVALUE('销售明细'[日期])
RETURN
SUMX(
FILTER(
FILTER(
'销售明细',
'销售明细'[商品编码] = SKU_bm)
),
'销售明细'[日期] <= date_buy)
),'销售明细'[销售数量]
)
这里首先使用VAR语句获取当前日期和之前日期的值,然后使用fiter函数进行筛选,按照商品编码汇总,在套用FITER函数获取之前日期的销售额,最后将当前日期和之前日期的销售额相加。这样就能够实现按照日期变化滚动求和的功能
结果入下图所示: