Building Data Models with PowerPivot_进阶篇

Building Data Models with PowerPivot_进阶篇


2.3 使用链接回标进行RFM分析
R Recent近度 MIN([近度]); [近度]=TODAY()-[下单日期]


3.1 使用高级DAX函数
高级聚合函数SUMX
SUMX函数比SUM函数高级的地方在于SUMX函数中可以嵌套使用筛选器函数
SUMX函数第一个参数是表格或者是返回表格数据的表达式,第二个参数是可嵌入筛选器函数的表达式


3.2 常用筛选器函数
可以用于表达式或新建表格中,筛选出指定数据,输出相应表格
FILTER 按条件筛选数据
VALUES 返回列或者表去重后的结果
TOPN 返回前几名的数据
ALL 强制计算所有数据
ALLEXCEPT 强制计算所有数据,排除函数中限定的某几列
ALLNONBLANKROW 返回非空白的数据
ALL,ALLEXCEPT,ALLNONBLANKROW 通常嵌套于其他DAX函数中,比如CALCULATE函数等,主要用于限制数据筛选。
筛选器函数一般嵌套用在其他函数中


3.3 SUMX加FILTER实现无关系的数据获取


'区域经理'中相同大区含有多个销售经理,同大区的多个销售经理应该有相同的销售额。现在以[区域经理表]为主表,给其添加计算列,以显示该经理的销售额。
新建计算列 = SUMX(FILTER('销售记录','区域经理'[区域]=RELATED('省份区域'[区域])),'销售记录'[金额])


其中'区域经理'[区域]是主表的字段,'区域经理'表和'省份区域' & '销售记录'两张表没有构建任何关系。
SUMX是迭代函数,在计算列中使用迭代函数会逐行计算相应结果。
本例中相当于SQL 中的子查询。


3.4 Earlier函数 - DAX进阶的里程碑


Earlier函数突破了DAX函数在行上面的限制
单表累积值的计算
新建计算列_累积值 = SUMX(FILTER('产品销售表',EARLIER('产品销售表'[销售金额])<='产品销售表'[销售金额]),'产品销售表'[销售金额])
在上述公式中对主表每一行值计算过程中都会根据FILTER函数后的表参数生成一张虚拟表
FILTER函数筛选'产品销售表'时,FILTER函数帮我们生成了一张虚拟的表格;EARLIER函数中的参数'产品销售表'[销售金额]代表了主表中的逐行获取的数值,本例第二个'产品销售表'[销售金额]指代的是由FILTER函数创建的虚拟的表/字段。


新建计算列_销售总额 = SUMX(ALL('产品销售表'),'产品销售表'[销售金额])


3.5 使用Earlier进行排名
新建计算列_排名 = COUNTROWS(FILTER('产品销售表'EARLIER('产品销售表'[销售金额])<'产品销售表'[销售金额]))+1


3.6 使用Earlier区分新老用户
新建计算列_用户类型=IF(SUMX(FILTER('销售记录',EARLIER('销售记录'[客户ID])='销售记录'[客户ID]&&EARLIER('销售记录'[下单日期])>'销售记录'[下单日期]),'销售记录'[金额])>0,"老用户","新用户")


GENERATE(VALUES('用户流量记录'[姓名]),VALUES('日期表'[月份])) 可以替代掉summarise函数,写法更简洁易懂


4.1 筛选上下文 & 行上下文
context 语境,环境,上下文
***SUM之类的函数只能用于筛选上下文语境中,不能作为计算列使用


4.2 使用FILTER和ALL进行上下文交互
ALL会忽略筛选上下文
FILTER会保持筛选上下文


例子
MEASURE 销售额 = SUM([金额]) //会随着筛选器省份等值的变化而变化
MEASURE 公路自行车销售额 = SUMX(FILTER('销售记录','销售记录'[产品名称]="公路自行车"),'销售记录'[金额])
MEASURE 公路自行车销售额占比 = DIVIDE([公路自行车销售额],[销售额])


MEASURE 公路自行车销售额CAL = CALCULATE([销售额],'销售记录'[产品名称]="公路自行车")


注1:FILTER筛选函数中内嵌的过滤条件属于行上下文,该函数依然受筛选上下文的影响。
注2:CALCULATE函数内包含过滤条件,当外部筛选上下文作用的字段与该函数内过滤条件设置的字段重合时,CALCULATE函数采纳函数内设置的过滤条件而忽略该筛选上下文。


4.3 使用CALCULATE进行上下文转换
当我们不需要某一特殊列根据'产品分类'进行筛选时,可以使用CALCULATE+ALL['产品分类']组合
CAL = CALCULATE([销售额],ALL['产品分类'])
该方式适用于计算相应分类 '产品分类' 占总额的比重

猜你喜欢

转载自blog.csdn.net/ChristopherChen/article/details/78650160