SSAS & Excel BI Tips正篇之二:性能调优之KeyColumn & NameColumn

SSAS的维度特性(Attribute)有以下三个属性(Property):KeyColumn, NameColumn, ValueColumn,下图所示为AW的Date维度对这三个Column属性的设置,而我们利用向导生成的维度默认只有KeyColumn设置,如果没有手动设置NameColumn的话,其值默认等于KeyColumn,如果没有手动设置ValueColumn的话,其值默认等于NameColumn。通常来说维度表数据量不大时使用向导生成SSAS维度不会有什么问题,而如果维度表数据量稍大,例如上千万级别的维度表,就不得不好好优化下了。

首先我们得先理解这三个Column属性,在SSMS里打开一个MDX查询,数据源是AW Cube, 展开Date维度,定位到一个Date成员[January 1, 2005],并拖放到右边的脚本编辑窗口,可以看到生成的脚本是[Date].[Date].&[20050101],数据源展现的成员名称[January 1, 2005]就是NameColumn,拖出来生成的脚本显示的成员名称[20050101]就是KeyColumn。

我们再执行下面一段脚本,看到[Date].[Date].&[20050101]这个成员的三个Column属性对应的值如图所示

WITH MEMBER Measures.ValueColumn as [Date].[Date].&[20050101].MemberValue

MEMBER Measures.KeyColumn as [Date].[Date].&[20050101].Member_Key

MEMBER Measures.NameColumn as [Date].[Date].&[20050101].Member_Name

SELECT {Measures.KeyColumn, Measures.NameColumn, Measures.ValueColumn} ON 0

FROM [Adventure Works]

再对比下属性编辑框里的设置来理解

我们看到KeyColumn是int整型,用于唯一标识维度属性的成员;NameColumn是WChar字符串,用于在客户端为用户展现friendly的名称;ValueColumn是Date日期类型,通常用于存储额外信息以便创建Calculation时使用,也可用于客户端做智能分析,例如设置ValueColumn为Date日期类型时,Excel客户端右键菜单里会多出一个Date Filters的日期智能过滤菜单

假设我们有下面这么一张会员维度表,并按向导生成默认的SSAS维度,那么会员等级(DimAccount.tier_varchar)这个属性的三个Column默认设置如下,KeyColumn是字符串类型,NameColumn和ValueColumn未做设置,默认等于KeyColumn

再来看下处理这个维度时需要去数据库做什么事情,复制下图所示的脚本到SSMS,看到是要对会员维度表的会员等级字段进行去重查询

接下来我们对会员维度表做一些改动,把数据结构修改成下图所示的效果,会员等级不再使用varchar类型,改用tinyint,并添加一张字典表,记录下每个会员等级编号对应的等级名称

如果数据库里没有设置这两张表的主外键关系的话,可以在SSAS数据源视图里指定关系如下

创建DimAccount2维度时,向导会提示存在相关表DimTier,默认勾选不做改动

在进行到选取可用属性时,保持默认只选中Tier Id不做改动,切记不要选中Tier Name,主要就是想用这个tinyint类型的Tier Id,后面可以将其改名为Tier Name

下图为向导生成的DimAccount2维度Tier属性的三个Column设置,看到KeyColumn为tinyint类型,NameColumn和ValueColumn默认为空,如果此时部署处理维度,那么客户端展现的Tier将都是数字,不具备可读性,所以这里我们要设置下NameColumn,指定名称列为tier_name,如此才能保证客户端能够展现出可读性的Tier

我们再看下处理DimAccount2维度时需要去数据库做什么事情,拷贝处理Tier Name(其实是Tier Id了)的脚本出来

可以看到不同于DimAccount1的是,这里仅仅是对DimTier这张字典表的tier_id, tier_name进行去重查询,相对于会员表来说,这张字典表实在是小的可爱

去SSMS里验证下,拖出金卡会员到脚本编辑框,看到显示的是[Tier Name].&[2],说明SSAS Dimension数据存储的确实是tinyint类型,直到需要客户端展现时才mapping到对应的Name字符串,这个mapping正是从Tier字典表检索到Name的。

再用With Member验证下

我们来理解下优化原理,首先,要处理(process full)这两张会员维度表,是必须要去rdbms数据源做全表读取的,假设会员表有一千万行记录,并且类似会员等级这样的字段有10个,那么粗略一算,第一张以字符串设计的会员表需要占用磁盘800M的空间(未做表压缩),而第二张以tinyint设计的会员表仅仅占用100M的空间,也就是说SSAS要去数据库执行这两张会员表的全表查询,分别需要去磁盘读取800M和100M的数据,这个磁盘开销就有8倍之差了,之后数据加载到buffer pool内存缓冲区里,又会分别产生数倍之差的内存开销,最后再把这些数据处理到SSAS Cube Dimension里(也是磁盘文件),再次产生不等额的磁盘开销,此外还有Distinct去重计算,前者需要对会员维度这张大表做Tier去重,后者只需要对会员等级这张小的字典表做去重,显然运算量是不同重量级的,这些还只是处理过程中的开销,也许你是在夜里做的处理,不怎么care这些,那么查询的性能总归是要关心下的吧,Dimension Size必然也是会影响查询性能的。

补充一点,切忌滥用此优化方案,变字符串类型为较小的数字类型是为了节省空间,从而降低磁盘和内存开销,只有在重复度较高的字段上使用才有意义,如果字段本身的重复度很低,这么做反而会适得其反。

最后看下SSAS Performance Guide白皮书里怎么描述这个Benefits:

  • Eliminate the need for extraneous attributes. Reducing the total number of attributes used in your design also makes it more efficient.
  • Reduce processing time, reduce the size of the dimension.
时间: 2024-08-16 18:57:15

SSAS & Excel BI Tips正篇之二:性能调优之KeyColumn & NameColumn的相关文章

SSAS & Excel BI Tips正篇之三:远程分区 (Remote Partition) 负载均衡

原课程计划里并没有这篇内容,今天在群里讨论SSAS的负载均衡方案,有网友提到Remote Partition远程分区,恕我孤陋寡闻,之前未曾了解过这个解决方案,阅读了官方的文档后觉得这个的确很有益处,这里记录下Demo实践的过程供大家参考,并特此鸣谢方案的提出者"理想"同学,很多时候真的是没有做不到,只有想不到. https://technet.microsoft.com/en-us/library/ms174837(v=sql.90).aspx 上面连接是我这个Demo所参考的官方向

SSAS & Excel BI Tips番外篇之一:What-If分析

这个系列用于记录工作中利用SSAS和Excel进行数据分析的经验技巧,正片放在了天善(SSAS & Excel BI Tips),番外篇现在打算以博客的形式来分享些小技巧,小到不足以作为独立的课程来讲解,但又是很多BA, BU不熟悉却很有用的技能,献给需要的朋友. 此篇说的是Excel的What-If假设分析,SSAS的What-If Writeback打算放在正片讲解. 下图所示是一个简单的等额本金贷款月供计算,第一行是总贷款额30万,第二行是已还款月数默认置为0,第三行是总还款月数20年24

性能调优概述,这是一篇最通俗易懂性能调优的总结!

1. 作者概述 2. 什么是性能调优?(what) 3. 为什么需要性能调优?(why) 4. 什么时候需要性能调优?(when) 5. 什么地方需要性能调优?(where) 6. 什么人来进行性能调优?(who) 7. 怎么样进行性能调优?(How) 8. 总结 硬件配置:CUP Xeon E5620 x 2 8核心, 内存 16G , 硬盘 RAID 10,操作系统: CentOS 6.4 x86_64(64位). 概述 在这篇博文中,我不想用一些抽象的概念去说性能调优的问题,只想用最通俗的

SSAS & Excel BI Tips番外篇之三:Pivot Chart

直接分享一篇最近在微信里传播的文章(http://daily.zhihu.com/story/4360204),是关于Excel数据透视图的发烧玩法,经常会看到一些BI产品在宣传时抛出些观点,说自己产品的图表是多么的绚丽,赶紧抛弃丑陋的Excel吧, Excel的数据透视图可能的确不如一些专业做图表的工具做出来的效果绚丽,但绝对不至于说丑陋不堪,另外,它的优势还在于和ppt以及word的无缝结合,这个是其它工具不容易做到的,所谓的可视化图表意义在于决策者能够以最直观的形式把握数据趋势,通常是由B

SSAS & Excel BI Tips番外篇之四:处理时找到重复的属性键、找不到属性键

这是两个非常常见的SSAS处理异常,网上也能找到很多文章讲解决办法,但很少见关于异常原因的分析,先来看看第一个" OLAP 存储引擎中存在错误: 处理时找到重复的属性键",一个维度表的关键字段,也就是通常讲的主键,是必须具有唯一性的,如果因为维度主键字段出现重复键,真没什么好说的了,太不应该犯这种错误,所以通常大家看到这个处理异常信息都是因为一个非主键属性,例如[Dim Customer]维度里的[Education]属性,和主键[Customer Key]是一对多的关系,Educat

iOS-Core-Animation之十二----性能调优

>*代码应该运行的尽量快,而不是更快* - 理查德 在第一和第二部分,我们了解了Core Animation提供的关于绘制和动画的一些特性.Core Animation功能和性能都非常强大,但如果你对背后的原理不清楚的话也会降低效率.让它达到最优的状态是一门艺术.在这章中,我们将探究一些动画运行慢的原因,以及如何去修复这些问题. ##CPU VS GPU 关于绘图和动画有两种处理的方式:CPU(中央处理器)和GPU(图形处理器).在现代iOS设备中,都有可以运行不同软件的可编程芯片,但是由于历史

性能测试分析与性能调优诊断--史上最全的服务器性能分析监控调优篇

一个系统或者网站在功能开发完成后一般最终都需要部署到服务器上运行,那么服务器的性能监控和分析就显得非常重要了,选用什么配置的服务器.如何对服务器进行调优.如何从服务器监控中发现程序的性能问题. 如何判断服务器的瓶颈在哪里等 就成为了服务器性能监控和分析时重点需要去解决的问题了. 1     服务器的性能监控和分析 1.1      Linux服务器的性能指标监控和分析 1.1.1       通过vmstat深挖服务器的性能问题 1.1.2       如何通过mpstat 分析服务器的性能指标

Spark性能调优——扩展篇

本文要解决的问题: 从更深层次考虑,对Spark进行性能调优. 目的 继基础篇分析了开发调优与资源调优之后,本文作为拓展篇,将深入分析数据倾斜调优与shuffle调优,以解决更加棘手的性能问题. 数据倾斜调优 简述 有时候,大家可能会遇到大数据开发过程中一个比较棘手的问题,那就是数据倾斜,此时Spark作业的性能会比预期差很多,数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能. 数据倾斜发生时的现象 绝大多数task执行得都非常快,但个别task执行极慢.

spark性能调优(二) 彻底解密spark的Hash Shuffle

装载:http://www.cnblogs.com/jcchoiling/p/6431969.html 引言 Spark HashShuffle 是它以前的版本,现在1.6x 版本默应是 Sort-Based Shuffle,那为什么要讲 HashShuffle 呢,因为有分布式就一定会有 Shuffle,而且 HashShuffle 是 Spark以前的版本,亦即是 Sort-Based Shuffle 的前身,因为有 HashShuffle 的不足,才会有后续的 Sorted-Based S