码迷,mamicode.com
首页 > 其他好文 > 详细

Power BI-Power Pivot-客户最后下单时间(1)

时间:2019-08-17 23:53:45      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:控制   客户   设置   字段   mic   没有   选项卡   pow   针对   

今天在Power BI星球中看了一篇有关计算列和度量值差异的案例文章,其操作是在Power BI Desktop中完成的,我这里将该案例转换为Excel2016中的实现方式,案例中的数据类似如下图所示。

技术图片

我们的目的就是算出每个客户的最后的订单日期值,这个需求非常简单,即使使用Excel公式都很容易实现,但是这个案例主要的目的是用最简单的方式来理解计算列和度量值。

首先我们来看看Power Pivot中的计算列

1、在空白的Excel工作表中录入如上图所示的数据内容后,将其转换为“表”并重新设置名称

技术图片

2、在Power Pivot选项卡中,找到“添加到数据模型”按钮,打开Power Pivot界面如下

技术图片

3、我们首先使用“添加列”的方式,尝试一次,按照逻辑,每个客户的最后的订单日期,就是求每个客户订单日期的最大值,我们首先使用公式

=MAX([订单日期])

说明几点:

此处使用的是计算列,并且引用的是本表中的列,所以不需要标注出表名称

字段名称使用成对的中括号隔离,表名称使用成对的单引号隔离

技术图片

结果分析1

观察图片所得到的的结果,可以看出采用类似Excel写公式的逻辑,返回的结果是错误的,该计算列中所有行返回的是同一个值,即订单日期列的最大日期值。

我们需要计算列在每一行中针对该行自己的情况(上下文)来计算,此时需要使用Calculate函数,那么我们就来看看套用了Calculate后的结果

技术图片

结果分析2

观察图片所得到的的结果,套用Calculate函数后,使每一行在计算的时候都考虑了当前行的情况,也就是使用了当前行的数据。更准确的说是使用当前行的所有列的值筛选了整个表的所有行。

即:例如第一行,筛选条件为:订单日期为2019/1/1,客户名称为甲,产品名称为A,金额为100的所有行。

筛选完毕后,再在该筛选结果表上计算订单日期的最大值。

我们在Excel中新添加一行数据,与第1行数据一模一样,将计算的逻辑切换为计算金额合计,修改公式来观察结果,其计算的结果为200

技术图片

基于以上情况的分析,如果我们需要按客户来计算订单日期的最大值,那么就需要清除对订单日期、产品名称、金额列的筛选条件,此时我们就需要借助于AllExcept函数

=CALCULATE(MAX([订单日期]),ALLEXCEPT(订单数据,订单数据[客户]))

ALLEXCEPT函数有2个参数:

第一个参数:进行筛选排除的表名

第二个参数:将只对该参数中指定的列实施筛选,其它的列将清除筛选

技术图片

启示总结:

在调用CALCULATE函数才会启动按行筛选功能,否则函数的计算将没有任何筛选数据能力,最终的计算将针对整个表计算

在没有配置行筛选的范围时,对于每一行,将会使用所有的列的值对表数据行进行筛选

要控制筛选条件,需要使用筛选过滤的函数进行处理,例如ALLEXCEPT

Power BI-Power Pivot-客户最后下单时间(1)

标签:控制   客户   设置   字段   mic   没有   选项卡   pow   针对   

原文地址:https://www.cnblogs.com/alexywt/p/11370950.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!