zoukankan      html  css  js  c++  java
  • MDX Cookbook 01

    假设我们只想显示一些与数据没有任何关联的维度成员信息,并且希望它们能够以行集的形式来显示,那么在 MDX 中就应该直接显示 ROWS  AXIS (1) 并且忽略掉 COLUMNS AXIS(0)。比如说有100个成员信息,如果是一列100行的形式通常符合大家的查询习惯,如果是一行100列,读起来就比较困难。

    需要了解的是 SELECT 语句最多可以支持 128 个轴,轴的序号从 0 ~ 127,但是基本上我们不会使用的到那么多, 一般只使用前两个, 即我们常用的 COLUMNS 和 ROWS, 因为大多数客户端工具只能支持到二维即显示行和列。并且是使用这些轴的名称的时候, 他们的顺序必须是连续的。即如果写了 ROWS, 那么COLUMNS 也必须存在 , 不能只使用 ROWS 而不使用COLUMNS。

    那么就只要这样做就可以了,在 COLUMNS 即 0 轴中放置一个空的 SET 集合 { },然后在 ROWS 轴上访问所需要的成员。

    SELECT
    { } ON 0,
    { [Customer].[Customer].[Customer].MEMBERS } ON 1
    FROM [Adventure Works]

    如果只需要查询所有包含 "John" 这个字的成员,比如说以后可以做成根据关键字查询 -

    SELECT
    { } ON 0,
    {
         Filter(
    [Customer].[Customer].[Customer].MEMBERS,
    InStr([Customer].[Customer].CurrentMember.Name, 'John') > 0
                  )
    } ON 1
    FROM [Adventure Works]

    如果为了显示 ROWS 轴而在 COLUMNS 轴上加上其它的度量值这样会降低查询效率,因为在 ROWS 中的每一个成员都会到 Cube 空间中去匹配对象的度量值。想这样在 COLUMNS 轴没有度量值的参入,那么 ROWS 轴上的维度成员就直接可以从维度空间里获取,效率更高一些。

    如果有一些第三方的工具或者编译器要求必须在 COLUMNS 位置提供度量值数据的话,那么可以使用常量数据来表示 ,这样仍然会比访问 Cube 中的度量值成员效率要高,只不过这个查询的结果并不真正使用而已。

    WITH MEMBER [Measures].[CustomerConstant] AS
    1
    SELECT
    { [Measures].[CustomerConstant] } ON 0,
    {
         Filter(
    [Customer].[Customer].[Customer].MEMBERS,
    InStr([Customer].[Customer].CurrentMember.Name, 'John') > 0
                  )
    } ON 1
    FROM [Adventure Works]

    参数化的查询 -

    SELECT
    { } ON 0,
    {
    Filter(
    [Customer].[Customer].[Customer].MEMBERS,
    InStr([Customer].[Customer].CurrentMember.Name, @CustomerName) > 0
      )
    } ON 1
    FROM [Adventure Works]


    本文涉及到的其它 MDX 知识点:

    1. MEMBERS - 从属性层次结构或者属性层次结构某一层中取出所有的成员,返回的是一个成员的集合 {SET}。如果某一个 Hierarchy 层次结构没有指定特别的 Level 时,Members 函数就会返回包含 All 在内的所有成员。关于 MEMBERS 的有关内容可以参照: MDX Step by Step 读书笔记(四) - Working with Sets (使用集合)
    2. Filter - 对指定集合中的每个元组计算指定一个逻辑表达式,如果表达式计算结果为 True,那么该函数将返回由指定集中每个元组构成的集。如果所有元组的计算结果都不为 True,则返回一个空集。关于 Filter 函数的使用可以参照 : MDX Step by Step 读书笔记(六) - Building Complex Sets (复杂集合的处理) -  Filtering Sets
    3. InStr - 返回一个字符串在另一个字符串中第一次出现的位置。有关 InStr 的内容可以参照 MSDN InStr 函数

    其它 BI 笔记请参照 BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server)

  • 相关阅读:
    PriorityQueue详解
    Queue介绍
    Dubbo面试踩坑
    Java中Integer和ThreadLocal
    Java中Deque特性及API
    由ubuntu装好想到的
    双系统试水上岸
    终于意识到BIM确实火了
    读阿里机器学习平台的一些总结
    继续ubuntu和遇到的easybcd的坑
  • 原文地址:https://www.cnblogs.com/biwork/p/3384949.html
Copyright © 2011-2022 走看看