SSAS处理快速变化维(Quickly Changing Dimension)的一种思路

  快速变化维(QCD)是相对于缓慢变化维(SCD)而言的,像【会员维度】里的【会员级别】这类变更不是很频繁的维度属性就属于SCD,而像【年龄】、【最后交易日期】这类变更频繁的维度显然不能以SCD的思路去解决问题,SCD能处理的维度通常都在oltp库里通常会做Change_Log,例如会员升级降级的时间点会在生产库做记录,但像【年龄】、【最后交易日期】这类维度如果也在oltp库做记录很快就会维度表爆炸,说到这里看官可能会对年龄这个维度有些疑问:为什么不用交易表里的交易时间来算“当时年龄”呢?不要着急,这里先要明确两个概念:【当时年龄】和【交易年龄】,如果要对这两个维度归类的话,后者【交易年龄】应该归为【交易维度】,而前者【当时年龄】是要归为【会员维度】的,【交易维度】里的【交易年龄】只能用来分析交易事实(例如分析交易是由哪些年龄段的会员产生的),而【会员维度】里的【当时年龄】是要能同时分析交易事实和会员事实的,就是说使用这个维度不只是能分析某年龄段的会员产生了多少交易量,还要能分析某年龄段的会员人数(不是每个会员都会有交易产生)。这个问题可以延伸到SCD里用代理键去关联维度表和事实表后能做哪些分析,同样的道理,如果【会员维度】是通过代理键和【交易事实】产生关联,那么再使用【会员维度】去分析【会员事实】就不那么容易了(主要是性能会打折扣),因为这时候【会员维度】的唯一标识已经不是account_id而是代理键,但【会员事实】要做的分析是distinct account_id而不是distinct 代理键,好吧,有点跑题了,还是继续聊QCD吧。既然不能像SCD一样把变更历史都持久化,又希望能以UDM的思维方式去实现Self-Service BI,有没有什么好的思路在SSAS里解决这类分析的效率问题呢?我的答案未必适合所有人,但如果能对你有那么一点启发也是非常有意义的事情,或者你有更好的方案也不妨一起讨论下。

  我们先来看看传统BI写sql是如何做此类分析的,首先明确一点,oltp库上只有每个会员的【会员生日】、每笔交易的【交易时间】这样的信息,对sql来说也的确不需要其它额外的信息了,通常是要先对会员做个时间点的快照,使这类会员维度信息回溯到这个时间点去,比如说用户想要分析2014-01-01这一天的【会员人数】、【交易人数】、【交易金额】三个事实度量值,并按2014-01-01这天的【会员年龄】分组统计,那么这段sql脚本必不可少是要输入一个日期参数并指定为2014-01-01,然后根据这个日期参数以及【会员生日】、【交易时间】去做当天的会员快照以得到当天所有会员的【会员年龄】和【最后交易日期】等维度信息,然后再左关联交易表去做聚合分析,思路大致如此,具体实现因人而异。

  现在我们回到SSAS,可不可以利用上面这个思路去做一个【会员快照维度】呢?用户自己随意指定一个日期,并命令ssas process update这个【会员快照维度】生成这个日期的会员快照,里面包括所有类似【会员年龄】、【最后交易日期】这样的快速变化维,甚至想【会员级别】这类SCD的属性也可以放进去,维度表的key还是account_id,这样就能保证和【会员事实】、【交易事实】同时产生关联,我的实现正是如此,因为我的客户选择的BI Tool是excel,所以一切就水到渠成,只需要用vsto做一个插件功能,给用户指定需要做快照回滚到的日期并提交

服务端收到命令后,只是简单的process update这个【会员快照维度】即可,而这个维度表对应的数据源是一个function,之所以没用view,是因为view不支持传参

ALTER FUNCTION [dbo].[f$DimPeriodAccount]
(
    @UDP varchar(100)
)
RETURNS TABLE
AS
RETURN
(
    .................
)

图上看到我做了两个【会员快照维度】,在做会员身份变更分析时会非常有用,比如说要分析2013-01-01这天的普通会员在2014-01-01这天有多少升级成金卡,有多少升级成钻石卡了,以及每个Group Target的交易事实。

  这是目前权衡性能和用户体验后,我能找到的最合适的方案,拿出来抛砖引玉给大家拍砖讨论吧

时间: 2024-11-05 17:29:48

SSAS处理快速变化维(Quickly Changing Dimension)的一种思路的相关文章

缓慢变化维 (Slowly changing dimension)

      维度建模的数据仓库中,有一个概念叫Slowly Changing Dimensions,中文一般翻译成"缓慢变化维",经常被简写为SCD.缓慢变化维的提出是因为在现实世界中,维度的属性并不是静态的,它会随着时间的流失发生缓慢的变化.这种随时间发生变化的维度我们一般称之为缓慢变化维,并且把处理维度表的历史变化信息的问题称为处理缓慢变化维的问题,有时也简称为处理SCD的问题. 个人感觉wiki上对缓慢变化维的定义比较详细,所以翻译此文并加入个人的观点看法.原文请参照 :http

DataStage系列教程 (Slowly Changing Dimension)缓慢变化维

BI中维表的增量更新一般有2种: Type 1:覆盖更改.记录的列值发生变化,直接update成最新记录. Type 2:历史跟踪更改.记录值发生变化,将该记录置为失效,再insert一条新的记录. 这两种其实都可以通过sql的left join来实现,不过DataStage给我们提供一个组件,可以很好的实现这个功能,这就是slowly changing dimension. 1 缓慢变化维表示例 如图1所示,是一个常用的缓慢变化维,该表的进数逻辑为: 当记录新插入到改表时,STARTDATE是

使用SSIS Slow Changing Transformation组件管理缓慢变化维

最近尝试用SSIS自带的 Slow Changing Transformation组件处理缓慢变化维,看到有一篇文章写的很详细,就按照步骤进行操作同时进行翻译.原网址来自:Managing Slowly Changing Dimension with Slow Changing Transformation in SSIS. 介绍 作为数据库专家或者ETL的开发者你可能偶尔会碰到需要维护和管理缓慢变化唯的场景.在SQL Server中有多种方法来实现,最简单的是使用SSIS 数据流组件中的Slo

缓慢变化维解决方案

缓慢变化维解决方案   Slowly Changing Dimensions (SCD) are dimensions that have data that slowly changes. 缓慢变化维:数据会发生缓慢变化的维度就叫"缓慢变化维". 举个例子就清楚了: 在一个零售业数据仓库中,事实表保存着各销售人员的销售记录,某天一个销售人员从北京分公司调到上海分公司了,那么如何来保存这个变化呢?也就是说销售人员维度要怎么恰当的处理这一变化.先来回答一个问题,为什么要处理,或保存这一变

Data Flow ->> Slow Changing Dimension

这里简单讲下SCD 在讲之前贴上两个有用的链接地址.作者的两篇文件讲解了SCD是什么以及应用 http://www.cnblogs.com/biwork/p/3363749.html http://www.cnblogs.com/biwork/p/3371338.html Slow Changing Dimension翻译过来就叫缓慢渐变维度.它被应用于数据仓库中对维度表数据的加载.因为数据总是在不断增长和变化的,在第一次完全加载数据后需要处理增量加载数据的处理场景,以及数据是否需要保留历史数据

关于数据仓库中缓慢变化维的总结

首先说一下概念,缓慢变化维(Slowly Changing Dimensions)指的是:维度表里面的数据并非是始终不变的,总会随着时间发生变化: 假设我们有一张我们公司的销售员维度表如下,记录了每个销售员的一些基本信息,那么随着时间的变化销售员可能会在各省公司间调岗,如将周杰伦调入北京分公司,针对这种变化,业务系统会直接将业务数据库中周杰伦的地址直接update为北京,而不会考虑历史变化,不过在数据仓库中由于有时我们需要进行历史变化分析,或者防止销售数据记录错误,所以需要对这种变化进行相应的处

OLAP --ODS 项目总结 -- 说说缓慢变化维

如果不是OLAP 系统或者BI系统,我们在生产环境下常遇到这样的问题 需要同步两个表.比如交通驾驶人,每个月需要同步. 表O_DRIVER_SOURCE 是来自第三方的源表,O_DRIVER_TARGET是本系统需要使用的目标表.现在需要同步这两个表很容易想到的 解决方案是 1.使用存储过程,有点复杂 2. merge into 语句 Merge into target O_DRIVER_TARGET Using O_DRIVER_SOURCE On ( O_DRIVER_SOURCE.driv

世界正在快速变化

变化是科技的常态.变化会让新技术层出不穷,而围绕新技术会产生新的经济形态,确立一种新的游戏规则,孕育出新的生机,也意味着旧事物的消亡,例如新兴公司的崛起与传统公司的衰退. 如果我们观察每次变化的本质,就会发现每一次的变革都是缘于追求便利性而产生的广泛性.这也就是为什么微软会抛弃DOS转而做Windows 3.0,因为它从程序控变成图形控,简化到普通用户都可以使用:这也就是为什么平板电脑会在PC之后快速增长,因为它不仅携带方便,而且更易用:这也就是为什么智能手机会引爆一场产业革命,因为终端设备不再

数据仓库专题(9)-缓慢变化维处理技术

一.案例描述 在一个零售业数据仓库中,事实表保存着各销售人员的销售记录,某天一个销售人员从北京分公司调到上海分公司了,那么如何来保存这个变化呢?也就是说销售人员维度要怎么恰当的处理这一变化. 先来回答一个问题,为什么要处理,或保存这一变化?如果我们要统计北京地区或上海地区的总销售情况的时候,这个销售人员的销售记录应该算在北京还是算在上海?当然是调离前的算在北京,调离后的算在上海,但是如标记这个销售人员所属区域?这里就需要处理一下这个维度的数据,即我们缓慢变化维需要做的事情. 二.解决方案 2.1