代码改变世界

MDX Cookbook 08 - 基于集合上的迭代递归

2013-12-03 16:58 by BIWORK, 541 阅读, 0 推荐, 收藏, 编辑
摘要:递归的应用有时是非常重要的,特别在迭代一个集合的时候。为什么这么说呢?原因在于迭代在MDX中的使用是基于集合函数的,像 GENERATE() 它们都需要遍历整个集合。但是如果这个集合非常的庞大,我们仅仅只需要在集合中查找一部分特定的东西,那么能够在找到需要的内容时就立刻停止的话,这就可以提高不少效率了。下面这个查询返回4个财年以及它们总共的 Order Count -SELECT{[Measures].[Order Count]} ON 0,NON EMPTY{Descendants([Date].[Fiscal Weeks].[All Periods], 1, SELF_AND_BEFO.. 阅读全文

MDX Cookbook 07 - 在不同层次结构的成员中实现 逻辑 OR 的效果

2013-12-02 23:50 by BIWORK, 730 阅读, 0 推荐, 收藏, 编辑
摘要:第一个示例:查看所有包括黑色产品的子目录产品中的 Reseller Order Quantity 和 Reseller Order Count。第二个示例:和第一个示例查询结构一样,只是筛选的是大小为 XL 的产品子目录,并且只有 Jerseys 一个返回。那么如果要在这里面表达 OR 的关系,即产品为黑色的或者大小为 XL 的产品子目录有哪些? 可以这样来实现 -SELECT { [Measures].[Reseller Order Quantity], [Measures].[Reseller Order Count] } ON ... 阅读全文

MDX Cookbook 06 - GENERATE 循环遍历

2013-12-02 23:45 by BIWORK, 722 阅读, 0 推荐, 收藏, 编辑
摘要:有时候需要从集合中取出特定的成员但是又不能执行遍历操作,这个时候就可以使用 GENERATE 函数来解决这个问题。根据地区查询每年的销售额 -SELECTNON EMPTY { [Date].[Calendar].[Calendar Year].MEMBERS * [Measures].[Sales Amount]} ON 0,NON EMPTY { [Sales Territory].[Sales Territory Country].MEMBERS } ON 1FROM [Adventure Works]现在需要查询每年销售额最高的那个月在各个地区的销售情况。WITH SET [Best 阅读全文

MDX Cookbook 05 - 条件过滤 FILTER-COUNT 与 SUM-IIF 实现

2013-12-02 23:40 by BIWORK, 2616 阅读, 0 推荐, 收藏, 编辑
摘要:下面的这个查询返回每个财月的 Customer Count 和 基于上个月比较的 Growth in Customer Base 的记录,Slicer 是 Mountain bikes。SELECT { [Measures].[Customer Count], [Measures].[Growth in Customer Base] } ON 0,NON EMPTY {[Date].[Fiscal].[Month].MEMBERS} ON 1FROM [Adventure Works]WHERE( [Product].[Product C... 阅读全文

微软BI 之SSRS 系列 - 基于时间段参数的 MDX 查询以及时间日历 Date Picker 的时间类型参数化

2013-11-28 15:13 by BIWORK, 4513 阅读, 2 推荐, 收藏, 编辑
摘要:今天在天善问答里看到一个问题,如果我没有理解错的话,它应该是指比如在一个报表中选取一个时间段,然后求出这个时间段的某个 Measure 的 SUM 和。并且同时求出这两个时间点对应的上一年的时间点之间的同一个 Measure 的 SUM 和。比如当前选取的时间点是 2004年1月8日,结束时间点是 ... 阅读全文

一般数据库增量数据处理和数据仓库增量数据处理的几种策略

2013-11-27 17:30 by BIWORK, 22084 阅读, 12 推荐, 收藏, 编辑
摘要:开篇介绍通常在数据量较少的情况下,我们从一个数据源将全部数据加载到目标数据库的时候可以采取的策略可以是:先将目标数据库的数据全部清空掉,然后全部重新从数据源加载进来。这是一个最简单并且最直观的并且不容易出错的一种解决方案,但是在很多时候会带来性能上的问题。如果我们的数据源来自于不同的业务系统,数据动... 阅读全文

MDX Step by Step 读书笔记(八) - Navigating Hierarchies 层次结构导航

2013-11-22 17:13 by BIWORK, 3188 阅读, 0 推荐, 收藏, 编辑
摘要:开篇介绍本章主要内容包括:解释各种不同的 MDX 导航函数的使用: Parent, Children, FirstChild, LastChild, Siblings, FirstSibling, LastSibling, RANK通过导航函数定位层次结构中的成员: Ancestor, Ancest... 阅读全文

MDX Step by Step 读书笔记(九) - Working with Time 处理时间

2013-11-21 17:08 by BIWORK, 4238 阅读, 4 推荐, 收藏, 编辑
摘要:开篇介绍这一章节主要用到的 MDX 函数:PeriodsToDate( [Level , [Member]] )- 从指定级别的范围内,返回与指定成员同一级别,从第一个期间开始到指定成员结束的期间集。Ytd( [Member] )Qtd( [Member] )Mtd( [Member] )Wtd( ... 阅读全文

微软BI 之SSIS 系列 - 两种将 SQL Server 数据库数据输出成 XML 文件的方法

2013-11-19 13:07 by BIWORK, 5431 阅读, 3 推荐, 收藏, 编辑
摘要:开篇介绍在 SSIS 中并没有直接提供从数据源到 XML 的转换输出,Destination 的输出对象有 Excel File, Flat File, Database 等,但是并没有直接提供 XML 文件输出的配置。但是我们仍然可以通过下面这些方法来实现:方法一:在数据流中使用平面文件对字符串 ... 阅读全文

MDX Step by Step 读书笔记(七) - Performing Aggregation 聚合函数之 Max, Min, Count , DistinctCount 以及其它 TopCount, Generate

2013-11-06 00:27 by BIWORK, 3574 阅读, 0 推荐, 收藏, 编辑
摘要:MDX 中最大值和最小值MDX 中最大值和最小值函数的语法和之前看到的 Sum 以及 Aggregate 等聚合函数基本上是一样的:Max( {Set} [, Expression])Min( {Set} [, Expression])直接看例子,先查询出所有 Sub Category 下的 Res... 阅读全文

MDX Cookbook 04 - 在集合中实现 NOT IN 逻辑 (Minus, Except, Filter 等符号和函数的使用)

2013-11-04 23:40 by BIWORK, 2043 阅读, 1 推荐, 收藏, 编辑
摘要:有时需要从一些查询结果里排除掉一些成员,当然平常情况下可以通过 MDX 查询中的 WHERE 条件即 Slicer 切片来完成,同样的这里显示的是如何在切片中排除掉一些成员。先看这一个查询 -SELECT { [Measures].[Reseller Order Count] } ON 0,NON EMPTY {[Promotion].[Promotion].MEMBERS }DIMENSION PROPERTIES [Promotion].[Promotion].[Discount Percent]ON 1FROM [Adventure Works]上面的查询返回了12个 Promotion 阅读全文

MDX Step by Step 读书笔记(七) - Performing Aggregation 聚合函数之 Sum, Aggregate, Avg

2013-11-04 23:30 by BIWORK, 4929 阅读, 3 推荐, 收藏, 编辑
摘要:开篇介绍SSAS 分析服务中记录了大量的聚合值,这些聚合值在 Cube 中实际上指的就是度量值。一个给定的度量值可能聚合了来自事实表中上千上万甚至百万条数据,因此在设计阶段我们所能看到的度量实际上就已经应用了某些聚合函数来决定这个值怎样被聚合。当然有可能已有的度量值远远还不够,还需要在查询的时候继续... 阅读全文

MDX Cookbook 03 - MDX 查询中负数,零和空值 NULL 的格式化处理

2013-10-23 21:48 by BIWORK, 1711 阅读, 0 推荐, 收藏, 编辑
摘要:FORMAT_STRING 属性在处理计算成员(通常是度量值成员)的时候会经常使用到,比如指定标准 Standard, 货币 Currency 或者 Percent 百分比格式。除此之外,还可以自定义一些格式化方式,通常对处理负数,零和空值非常有用。CREATE MEMBER [Adventure Works].[Measures].[Gross Profit formatted]AS[Measures].[Sales Amount] - [Measures].[Total Product Cost],FORMAT_STRING = "#,##0;- #,##0; 0 ;N/A&qu 阅读全文

MDX Cookbook 02 - 除数为零的问题

2013-10-23 21:37 by BIWORK, 870 阅读, 0 推荐, 收藏, 编辑
摘要:先直接看一个例子 -WITHMEMBER [Date].[Calendar Year].[CY 2006 vs 2005 Bad]AS[Date].[Calendar Year].[Calendar Year].&[2006] /[Date].[Calendar Year].[Calendar Year].&[2005],FORMAT_STRING = 'Percent'SELECT{[Date].[Calendar Year].[Calendar Year].&[2005],[Date].[Calendar Year].[Calendar Year]. 阅读全文

MDX Cookbook 01 - Skipping Axis 合理使用空的 SET 集合获取全部层次结构成员

2013-10-23 21:26 by BIWORK, 1061 阅读, 1 推荐, 收藏, 编辑
摘要:假设我们只想显示一些与数据没有任何关联的维度成员信息,并且希望它们能够以行集的形式来显示,那么在 MDX 中就应该直接显示 ROWS AXIS (1) 并且忽略掉 COLUMNS AXIS(0)。比如说有100个成员信息,如果是一列100行的形式通常符合大家的查询习惯,如果是一行100列,读起来就比较困难。需要了解的是 SELECT 语句最多可以支持 128 个轴,轴的序号从 0 ~ 127,但是基本上我们不会使用的到那么多, 一般只使用前两个, 即我们常用的 COLUMNS 和 ROWS, 因为大多数客户端工具只能支持到二维即显示行和列。并且是使用这些轴的名称的时候, 他们的顺序必须是连续的 阅读全文

微软BI 之SSIS 系列 - 数据仓库中实现 Slowly Changing Dimension 缓慢渐变维度的三种方式

2013-10-16 00:09 by BIWORK, 11790 阅读, 6 推荐, 收藏, 编辑
摘要:开篇介绍关于 Slowly Changing Dimension 缓慢渐变维度的理论概念请参看数据仓库系列 - 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型及原型设计本篇文章总结了实现缓慢渐变维度的几种方式,并且分析了 Changing Attribute 和... 阅读全文

SQL Server - 使用 Merge 语句实现表数据之间的对比同步

2013-10-15 15:29 by BIWORK, 25321 阅读, 10 推荐, 收藏, 编辑
摘要:表数据之间的同步有很多种实现方式,比如删除然后重新 INSERT,或者写一些其它的分支条件判断再加以 INSERT 或者 UPDATE 等。包括在 SSIS Package 中也可以通过 Lookup, Condition Split 等多种 Task 的组合来实现表数据之间的同步。在这里 "同步" 的意思是指每次执行一段代码的时候能够确保 A 表的数据和 B 表的数据始终相同。可以通过 SQL Server 中提供的 Merge 语句来实现,并且还可以将操作的细节记录下来。具体的细节内容请参照 -http://msdn.microsoft.com/zh-cn/librar 阅读全文

微软BI 之SSIS 系列 - 通过设置 CheckPoints 检查点来增强 SSIS Package 流程的重用性

2013-10-13 15:57 by BIWORK, 4186 阅读, 5 推荐, 收藏, 编辑
摘要:开篇介绍通常一个 ETL Package 是由多个控制流和数据流共同组成,有的时候 ETL 的步骤可能会比较多,整个流程执行下来的时间可能比较长。假设在 ETL Package 中包含5个Task,前3个Task执行超过1个小时,到了第4个Task的时候发生失败。如果下次执行的时候重新从第1个任务开... 阅读全文

数据仓库系列 - 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型及原型设计

2013-10-11 16:38 by BIWORK, 20849 阅读, 16 推荐, 收藏, 编辑
摘要:开篇介绍在从OLTP业务数据库向DW数据仓库抽取数据的过程中,特别是第一次导入之后的每一次增量抽取往往会遇到这样的问题:业务数据库中的一些数据发生了更改,到底要不要将这些变化也反映到数据仓库中?在数据仓库中,哪些数据应该随之变化,哪些可以不用变化?考虑到这些变化,在数据仓库中的维度表又应该如何设计以... 阅读全文

微软BI 之SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表

2013-10-09 23:09 by BIWORK, 8050 阅读, 5 推荐, 收藏, 编辑
摘要:基于数据仓库上的 SSRS 报表展示,一般可以直接通过 SQL 查询,存储过程,视图或者表等多种方式将数据加载并呈现在报表中。但是如果是基于 Cube 多维数据集的数据查询,就不能再使用 SQL 的语法了而应该使用 MDX 查询。关于 MDX 和其它 SSRS 的文章,请参看BI 系列随笔列表 (S... 阅读全文