日均值是比较常见的指标,本文对 MDX 计算日均值做一个总结

MDX 计算日均值,表达式一

WITH MEMBER Measures.[日均值] AS
   Avg(
      Descendants(
         [日期].[日期层次].CurrentMember, 
            [日期].[日期层次].[日期]
      ), 
      Measures.[主帖数]
   )
   ,Format_String = "#,##0"
SELECT
    Measures.[日均值] ON COLUMNS,
       [日期].[日期层次].[月份] ON ROWS
FROM
   [forum]

上面的代码使用 Descendants 获得在当前层次上的所有日期集合

然后使用 avg 函数取得平均值

MDX 的 Descendants 函数返回成员在指定级别或距离上的后代集,

可以选择包括或不包括其他级别上的后代。

Descendants 函数是 MDX 里最复杂的函数之一,搞懂它就真正了解了维度层次。

Descendants 说明

http://msdn.microsoft.com/zh-cn/library/ms146075.aspx

avg 函数说明

http://msdn.microsoft.com/zh-cn/library/ms146067.aspx

结果如下

特别要注意,计算季度日均值时,是季度指标/季度日期数,不能用月的日均值除以3。

这就是一种所谓半累加行为,参考说明见本文结尾。

层次结构展示

仔细看一下,上述结果有些问题

原来因为有几天没有帖子数, 而 avg 函数是不计算空值的。

修改一下 mdx 的计算方法,先 sum 再除以 count

WITH MEMBER Measures.[日均值] AS
   sum(
      Descendants(
         [日期].[日期层次].CurrentMember, 
            [日期].[日期层次].[日期]
      ), 
      Measures.[主帖数]
   )/ Descendants(
         [日期].[日期层次].CurrentMember, 
            [日期].[日期层次].[日期]
      ).count
   ,Format_String = "#,##0"
SELECT
    { Measures.[日均值]} ON COLUMNS,
       Descendants(
         [日期].[日期层次].CurrentMember, 
            [日期].[日期层次].[月份]
      ) ON ROWS
FROM
   [forum]   
   where [日期].[月份].&[2004-06-01T00:00:00]

得出正确结果:

重新看了一下 avg 函数说明,发现配合 CoalesceEmpty 函数可以包含空值

标准的写法

WITH MEMBER Measures.[日均值] AS
   avg(
      Descendants(
         [日期].[日期层次].CurrentMember, 
            [日期].[日期层次].[日期]
      ), 
     CoalesceEmpty( Measures.[主帖数],0)
   )
   ,Format_String = "#,##0"
SELECT
    { Measures.[日均值]} ON COLUMNS,
       Descendants(
         [日期].[日期层次].CurrentMember, 
            [日期].[日期层次].[月份]
      ) ON ROWS
FROM
   [forum]   
   where [日期].[月份].&[2004-06-01T00:00:00]

CoalesceEmpty 函数说明

http://msdn.microsoft.com/zh-cn/library/ms146080.aspx

如果能保证值都为非空或者本来就不需要包含空值,可以在 ssas 里直接把度量聚合函数

设为 AverageofChildren,完全不用写 MDX。计算结果同 MDX 表达式一

AverageofChildren 是半累加的一种,参考说明

SSAS 中的半累加聚集类型 (Semi-Additive Aggregation Type)

最终按层次展开效果,如下图

MDX之Avg函数使用的更多相关文章

  1. PostgreSQL avg()函数

    PostgreSQL的AVG函数是用来找出各种记录中的一个字段的平均值. 为了理解AVG函数考虑表COMPANY 有如下记录: testdb# select * from COMPANY; id | ...

  2. SQL AVG 函数

    定义和用法 AVG 函数返回数值列的平均值.NULL 值不包括在计算中. SQL AVG() 语法 SELECT AVG(column_name) FROM table_name SQL AVG() ...

  3. 25.AVG 函数

    定义和用法 AVG 函数返回数值列的平均值.NULL 值不包括在计算中. SQL AVG() 语法 SELECT AVG(column_name) FROM table_name SQL AVG() ...

  4. SQL-W3School-函数:SQL AVG() 函数

    ylbtech-SQL-W3School-函数:SQL AVG() 函数 1.返回顶部 1. 定义和用法 AVG 函数返回数值列的平均值.NULL 值不包括在计算中. SQL AVG() 语法 SEL ...

  5. mysql AVG()函数 语法

    mysql AVG()函数 语法 作用:AVG 函数返回数值列的平均值.NULL 值不包括在计算中.大理石模组 语法:SELECT AVG(column_name) FROM table_name m ...

  6. mysql获取某个字段平均值方法AVG函数的使用

    直接上脚本 ,)) AS 平均分 FROM students WHERE sex= '男' 其中,特别说明一下CAST关键字 CAST(字段名 as 要转换的类型) #其中,可以转换的类型为: CHA ...

  7. mysql avg()函数,获取字段的平均值

    mysql> select * from table1; +----------+------------+-----+---------------------+ | name_new | t ...

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

    开篇介绍 SSAS 分析服务中记录了大量的聚合值,这些聚合值在 Cube 中实际上指的就是度量值.一个给定的度量值可能聚合了来自事实表中上千上万甚至百万条数据,因此在设计阶段我们所能看到的度量实际上就 ...

  9. MDX函数(官方顺序,带示例)

    MDX函数(官方顺序) 1.  AddCalculatedMembers (MDX) 返回通过将计算成员添加到指定集而生成的集. 语法: AddCalculatedMembers(Set_Expres ...

随机推荐

  1. Constructing Roads In JGShining's Kingdom

    点击打开题目链接 本题目是考察  最长递增子序列的  有n^2     n(logn)  n^2  会超时的 下面两个方法的代码  思路  可以百度LIS  LCS dp里面存子序列 n(logn) ...

  2. Chapter3——进入Android Dalvik虚拟机(二)

    Dalvik汇编语言基础 Dalvik虚拟机为自己设计了一套指令集,并制定了自己的指令格式和调用规范. 位描述约定如下: 每16位的字采用空格分隔开来 每个字母表示4位,每个字母按顺序从高字节开始,排 ...

  3. P2383 狗哥玩木棒

    题目背景 狗哥又趁着语文课干些无聊的事了... 题目描述 现给出一些木棒长度,那么狗哥能否用给出的木棒(木棒全用完)组成一个正方形呢? 输入输出格式 输入格式: 输入文件中的第一行是一个整数n表示测试 ...

  4. Tensorflow基础知识

    基本知识 使用 TensorFlow, 你必须明白 TensorFlow: 使用图 (graph) 来表示计算任务. 在被称之为 会话 (Session) 的上下文 (context) 中执行图. 使 ...

  5. AtCoder Grand Contest 012 D:Colorful Balls

    题目传送门:https://agc012.contest.atcoder.jp/tasks/agc012_d 题目翻译 给你一排一共\(N\)个球,每个球有一个颜色\(c_i\)和一个重量\(w_i\ ...

  6. 解决最近windows版本Node.js中npm出现的“Error: ENOENT, stat 'C:\Users\UserName\AppData\Roaming\npm”的问题

    (转载请注明出处,from www.cnblogs.com/xdxer) 问题可能如下所示 解决方案: 在 'C:\Users\UserName\AppData\Roaming\‘ 下手动的增加一个文 ...

  7. Win10设置vs2010总是以管理员身份运行

    有的项目用vs打开后直接运行总是要求提升权限,如下图       1.第一步(这样的方式只能是先运行vs,然后再打开项目,这样才是以管理员的身份运行的.但是如果是通过sln文件的快捷方式打开的,却不是 ...

  8. Mogodb 存储DateTime问题

    由于mogodb默认用的是国际日期utc和中国时间有8小时时差. c#当中利用特别属性来解决,如: /// <summary>        /// 创建日期        /// < ...

  9. iOS中判断基础字符(大小写、数字等的判断)

    函数:isdigit 用法:#include 功能:判断字符c是否为数字 说明:当c为数字0-9时,返回非零值,否则返回零. 函数:islower 用法:#include 功能:判断字符c是否为小写英 ...

  10. SSAS GUID 添加 行计数,非重复计数 等 遇到的莫名其妙的问题

    在基于某个GUID 进行非重复性计数时 需要对GUID 转换类型,如:CAST(ColumnName as varchar(36)) 可参考:http://stackoverflow.com/ques ...