Excel中怎么利用PowerPivot实现跨表的的关联查询
1、选择销售出库表的数据区域(可整列整列选择)→菜单开始→查找和选择→定位条件→空值→这时,活跃单元格框出现在最左上角的空白处,键盘输入“=”→按上箭头或鼠标选择上一个单元格→按着Ctrl回车(结束公式编辑状态)。这样,就完成了数据补值。
2、规范订单号列表→按列排序。经理给的订单号列表是一个单元格存储了很多个单号,这样是无法进行匹配查询的。先将它用逗号分列成横表,再复制选择性粘贴→转置粘贴成竖表。
3、添加表建立数据模型。在销售出库表,整列整列地选择表,点选菜单→PowerPivot→添加到数据模型→勾选我的表含有标题,确认。第一次启动PowerPivot会很慢,要耐心等待。同样道理,将跟踪的订单号也添加进去。
4、在数据模型里面建立关系。“关系”是关系型数据库里面一个很重要的概念,这里不展开,有兴趣可自己上网查。这里应用“关系”,起到数据从一个表传递到另一个表的作用。回到PowerPivot界面,点选菜单的开始→在查看组里选择关系视图。将“表2”的订单号拖到“表1”的单据编号,这样,就建立了1个一对多的关系。
5、用数据模型建数据透视表。菜单插入→数据透视表→选择“使用此工作表的数据模型”,由于之前建立了数据模型,所以这个选项没有致灰→位置选现有工作表,跟踪的订单号!D5,其他内容不需要改,确认。将表2的订单号拖到“行”,将表1的单据编号、产品名称拖到“行”,将表1的实发数量、销售金额拖到“值”。
6、调整数据透视表格式。菜单设计→分类汇总,不显示汇总→报表布局,已表格形式显示。这样,累赘的排列变得清爽了。如果把产品名称从行删除,就更加清爽,容易得出结果,匹配出2条订单(出现在上面),匹配不出的订单在下方。此外,根据实际查询需要,可以将更多字段拖入“行”,这里略。
联系检索实际,以一种检索工具为例,说明如何调整检索策略,以达到满意的检索效果
类级别检索策略有立即检索和延迟检索,默认的检索策略是立即检索。在Hibernate映射文件中,通过在<class>上配置lazy属性来确定检索策略。对于Session的检索方式,类级别检索策略仅适用于load方法;也就说,对于get、qurey检索,持久化对象都会被立即加载而不管lazy是false还是true.一般来说,我们检索对象就是要访问它,因此立即检索是通常的选择。由于load方法在检索不到对象时会抛出异常(立即检索的情况下),因此我个人并不建议使用load检索;而由于<class>中的lazy属性还影响到多对一及一对一的检索策略,因此使用load方法就更没必要了。
关联级别检索策略有立即检索、延迟检索和迫切左外连接检索。对于关联级别检索,又可分为一对多和多对多、多对一和一对一两种情况讨论。
一对多和多对多关联关系一般使用<set>配置。<set>有lazy和outer-join属性,它们的不同取值绝对了检索策略。
1)立即检索:这是一对多默认的检索策略,此时lazy=false,outer-join=false.尽管这是默认的检索策略,但如果关联的集合是无用的,那么就不要使用这种检索方式。
2)延迟检索:此时lazy=true,outer-join=false(outer-join=true是无意义的),这是优先考虑的检索方式。
3)迫切左外连接检索:此时 lazy=false,outer-join=true,这种检索策略只适用于依靠id检索方式(load、get),而不适用于query的集合检索(它会采用立即检索策略)。相比于立即检索,这种检索策略减少了一条sql语句,但在Hibernate中,只能有一个<set>配置成 outer-join=true.
多对一和一对一检索策略一般使用<many-to-one>、<one-to-one>配置。<many-to-one>中需要配置的属性是 outer-join,同时还需要配置one端关联的<class>的lazy属性(配置的可不是<many-to-one>中的lazy哦),它们的组合后的检索策略如下:
1) outer-join=auto:这是默认值,如果lazy=true为延迟检索,如果lazy=false为迫切左外连接检索。
2) outer-join=true,无关于lazy,都为迫切左外连接检索。
3) outer-join=false,如果lazy=true为延迟检索,否则为立即检索。
可以看到,在默认的情况下(outer-join=auto,lazy=false),对关联的one端对象Hibernate采用的迫切左外连接检索。依我看,很多情况下,我们并不需要加载one端关联的对象(很可能我们需要的仅仅是关联对象的id);另外,如果关联对象也采用了迫切左外连接检索,就会出现select语句中有多个外连接表,如果个数多的话会影响检索性能,这也是为什么Hibernate通过hibernate.max_fetch_depth属性来控制外连接的深度。对于迫切左外连接检索,query的集合检索并不适用,它会采用立即检索策略。
对于检索策略,需要根据实际情况进行选择。对于立即检索和延迟检索,它们的优点在于select语句简单(每张表一条语句)、查询速度快,缺点在于关联表时需要多条select语句,增加了访问数据库的频率。因此在选择即检索和延迟检索时,可以考虑使用批量检索策略来减少select语句的数量(配置batch-size属性)。对于切左外连接检索,优点在于select较少,但缺点是select语句的复杂度提高,多表之间的关联会是很耗时的操作。另外,配置文件是死的,但程序是活的,可以根据需要在程序里显示的指定检索策略(可能经常需要在程序中显示指定迫切左外连接检索)。为了清楚检索策略的配置效果如何,可以配置show_sql属性查看程序运行时Hibernate执行的sql语句。
- 相关评论
- 我要评论
-