ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 12748|回复: 15

[分享] 关于之前高级数据透视表创建原理的答案

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-6-11 15:48 | 显示全部楼层 |阅读模式
本帖最后由 张文洲 于 2015-6-11 15:48 编辑

之前在论坛发了一个帖子,演示了一例高级数据透视的效果,具体内容见

透视表还能作成这样!!!还等什么,快来练练手
http://club.excelhome.net/thread-1208131-1-1.html


现在讲创建原理和大家分享



解答分为几个部分,这里先说一说基于数据模型的计算字段(旧版也叫度量值)的基本概念


一、基于数据模型计算字段的概念
以下是数据源,data表是某单位2013年全年甲乙两种存货出入库数据。

1.png

我们先将这张表导入数据模型,然后新建一个计算字段,字段名为入库合计
入库合计= SUM(data[入库])
其中入库合计是字段名字,SUM是聚合函数,data是表名称,入库是被计算的字段名

此时我们可以看见最下方显示的入库合计=5661

3.png

回到EXCEL表,选择入库列,就可以发现此时的计算字段值刚好等于入库列合计

2.png

现在我们来做一个数据透视表,分别将仓库地点放入行区域,商品名称放入列区域,入库合计放入值区域
(为了说明问题,我暂且也将日期和商品名称分别放入筛选区域、日程表和切片器,并尚未进行任何筛选)
显示结果如图
B14单元格中会对 入库合计 进行计算,但是是根据当前单元格对应的行标签、列标签、筛选区域、

日程表、切片器的值对数据源进行筛选以后,进行聚合计算得到的结果,每个单元格都是单独计算的。

5.png

如图,我们对数据模型中表进行筛选,观察下方的计算字段值的变化,刚好等于透视表的当前单元格。

4.png

也就是说,我们建立的计算字段的值取决于单元格在透视表中对应的行列标签、筛选区域、透视表、切片器的筛选值,
将这些值应用于数据模型表中进行筛选,最后进行聚合计算的结果。
当然,我们可以将sum 改为max/min/count(a)/average等,原理是一样的。

当然,powerpivot还提供了更高级的函数,比如DISTINCTCOUNT统计不重复值的个数等。



评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-6-11 15:48 | 显示全部楼层
本帖最后由 张文洲 于 2015-6-12 12:49 编辑

二、如何跳出计算字段默认的条件计算模式

上节介绍了计算字段会按照数据透视表的行标签、列标签、筛选区域(分页区域)、切片器、日程表的当前值对数据模型中表进行筛选以后再进行聚合计算,这是计算字段的默认计算模式。
那么我们如何跳出这一默认计算模式呢?

1.如下图,我想创建一个字段,计算每个仓库总的入库数,而不考虑商品品种,也就是想忽略行标签的值不进行筛选。

1.png

因为普通的SUM(’DATA’[入库])是按照默认的计算模式来计算的,我们需要更高级的条件计算函数,这就是经常使用的CALCULATE函数
语法是:
CALCULATE(<EXPRESSION>,<FILTER1>,<FILTER2>…)
EXPRESSION是计算表达式,可以嵌套SUM/MAX/MIN/COUNT/AVERAGE……,
FILTER1是筛选条件1,FILTER1是筛选条件2……
这个函数类似于工作表中SUMIFS/COUNTIFS函数,只不过这个函数一个函数可以取代多个函数,而且还可实现类似于MAXIFS/MINIFS等函数的功能
需要强调的是,这个函数中的筛选条件比透视表中的行列标签、筛选区域、切片器、日程表中的筛选值具有更高的优先级,
也就是说这个函数中的FILTER条件与透视表中的条件有相同的字段条件,函数计算会忽略透视表中的条件
举个例子,比如我想计算丙商品的入库数,不管当前行标签是什么商品,我总是计算丙商品的入库数
可以用这个公式
丙入库合计 =CALCULATE(SUM(DATA[入库]),DATA[商品名称]="")
其中SUM(DATA[入库])就是EXPRESSION,当然我也可以把SUM换成MAX/MIN/COUNT等,这个参数指定计算方式
DATA[商品名称]="丙"是FILTER1,就是筛选条件1.这里只有一个条件,我们可以设置其他多个条件
图中E4:E6虽然对应的行标签分别是丙甲乙,但是因为函数中已经有DATA[商品名称]="丙"的条件限制,因此会忽略透视表的行标签。

当然,如果透视表中的列标签、日程表、切片器等有筛选值,也同样会被忽略。

2.png



2.不知道有没有注意到,DATA[商品名称]="丙"中的条件“丙”是一个固定值,如果我想选择全部商品,达到下图效果,


那么条件如何设置呢?这里就要简单介绍我们的ALL函数
先把计算字段显示出来
仓库入库合计 = CALCULATE(SUM(DATA[入库]),ALL(DATA[商品名称]))
其中第二个参数ALL(DATA[商品名称])是ALL函数返回的一个筛选值。ALL函数的语法是
ALL (COLUMN[,COLUMN[, …]])   
这个可以选择某一列或某几列的所有值,
也就是说计算字段在计算时会忽略透视表中所有筛选条件对ALL函数中出现的列进行的筛选,
或者
ALL(TABLE)

计算字段在进行计算时会忽略透视表中所有筛选条件对这个表进行的筛选。


评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-6-11 15:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 张文洲 于 2015-6-18 23:43 编辑

计算字段公式千变万化,此为答案的一种
先帖上来
期末结存.rar (47.84 KB, 下载次数: 313)

未完待续,占位                                      

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-6-15 16:56 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-6-16 09:36 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-6-16 12:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
等待中。。。,学习了

TA的精华主题

TA的得分主题

发表于 2015-6-26 09:41 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-12-15 16:47 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-12-16 10:43 | 显示全部楼层
张文洲 发表于 2015-6-11 15:48
计算字段公式千变万化,此为答案的一种
先帖上来

每看一贴,总有收获

TA的精华主题

TA的得分主题

发表于 2015-12-18 11:06 | 显示全部楼层
多谢老师分享。跟着老师的步骤做了下。
老师的powerpivot界面输入的计算字段的公式可以显示,公式返回的结果,我的不知道为什么没显示公式的结果 QQ图片20151218110435.png



您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-20 02:46 , Processed in 0.047677 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表