Mondrian系列(五)-深入维度、层次和级别(3)-Level显示和多层次结构

news/2024/5/19 1:22:53 标签: hierarchy, string, integer, table, jdbc, date

1.排序和Level的显示

注意,在上述例子的时间层次中,在<level>元素的ordinalColumn和nameColumn属性,会影响在结果中level如何显示。ordinalColumn属性指定了在层次表中的一个列,提供了给定level的成员的顺序,nameColumn指定要显示的列。

例如,在上面例子的月level中,datehierarchy表有month(1..12)和month_name(1月,2月..12月)这两个列。在MDX中,有效的成员描述一般是下面的格式:

[Time].[2005].[Q1].[1]

[Month]级的成员会显示为顺序的1月,2月等等。

在父子层次中,成员经常在层次顺序排序,ordinalColumn属性控制兄弟姐妹出现在他们父母中的顺序。排序列可以是能用在ORDER BY语句中的任何数据类型。排序的范围是每个父母,因此在上面的例子中,day_in_month列每个月都会循环。通过JDBC驱动返回的值应该为非空的java.lang.Comparable对象的实例,会通过Comparable.compareTo方法进行比较顺序。

包含type属性的Level,值可以设置为String,Integer,Numeric,Boolean,Date,Time和Timestamp。默认是Numeric,因为主键列一般为数值类型。如果类型不同,Mondrian需要知道正确的类型以便生成SQL,例如String值会生成用单引号包含的语句:

     WHERE productsku=’123-456-AAA’

2.多层次结构

一个维度可以包含超过一个的层次:

<table border="1" cellspacing="0" cellpadding="2" width="600"><Dimension name=”Time” foreignKey=”time_id”>
    <Hierarchy hasAll=”false” primaryKey=”time_id”>
        <Table name=”time_by_day”/>
        <Level name=”Year” column=”the_year” type=”Numeric” uniqueMembers=”true” />
        <Level name=”Quarter” column=”quarter” uniqueMembers=”false” />
        <Level name=”Month” column=”month_of_year” type=”Numeric” uniqueMembers"=”false” />
    </Hierarchy>
    <Hierarchy name=”Time Weekly” hasAll=”false” primaryKey=”time_id”>
        <Table name=”time_by_week” />
        <Level name=”Year” column=”the_year” type=”Numeric” uniqueMembers=”true” />
        <Level name=”Week” column=”week” uniqueMember=”false” />
        <Level name=”Day” column=”day_of_week” type=”String” uniqueMembers=”false”/>
    </Hierarchy>
</Dimension>table>

注意,第一个层次没有name,默认的,一个层次有和他维度一样的名字,因此第一个层次叫做Time。

这些层次结构难道没有相当多的共同点吗?他们甚至都用同一个表!将两个层次放如到同一个维度的主要原因是这对最终用户更有意义,最终用户知道放在一个轴上的Time层次和在另一个轴上的Time Weekly层次有没有意义。如果两个层次在同一个维度上,MDX语句不允许在同一个查询中同时使用这两个层次。


http://www.niftyadmin.cn/n/1140208.html

相关文章

【求杨辉三角】 C语言

#include<stdio.h> int main() {int i 0;int j 0;int a[100][100];int num 0;printf("请输入要打印的行数:>");scanf("%d", &num);for (i 0; i <100; i){for (j 0; j <100; j){a[i][j] 0;}}for (i 0; i < num; i){a[i][0] 1…

丢了一篇文章

Mondrian系列(五)-深入维度、层次和级别(2)跑到哪去了&#xff1f;今天发布的时间应该是11月30日&#xff0c;怎么发布出来是11月23日呢&#xff1f;csdn又在搞什么&#xff1f;

Mondrian系列(五)-深入维度、层次和级别(4)-维度退化和内联表

1.维度退化 维度退化是指对于简单的维度来说&#xff0c;不创建自己的维表&#xff0c;例如&#xff0c;下面的事实表&#xff1a; product_idtime_idpayment_methodcustomer_idstore_iditem_countdollars5520040106Credit123223$3.547820040106Cash89221$20.0019920040107AT…

发送信息流程(冯诺依曼体系)

发送信息流程&#xff1a; 你通过键盘输入信息到内存中&#xff0c;pcu在内存中读取之后&#xff0c;给信息进行封装之后加上了报头&#xff0c;然后转交内存&#xff0c;然后通过网卡&#xff08;看不见的输出设备&#xff09;通过网络传输&#xff0c;对方的网卡在网络中读取…

Mondrian系列(五)-深入维度、层次和级别(5)-度量属性

1.默认度量属性 和元素可以指定可选属性”defaultMeasure”。在中指定defaultMeasure允许使用者显式指定任一基本度量作为默认度量。在中指定defaultMeasure允许使用者显式指定任一VirtualMeasure作为默认度量。注意&#xff0c;如果默认度量没有指定&#xff0c;会指定cube中的…

指针数组 数组指针 的判断

用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整型数 int *a[10]; 这是一个指针数组。数组a里存放的是10个int型指针 int (*a)[10]; 这是一个数组指针。a是指针&#xff0c;指向一个数组。数组a有10个int型元素。 int (*a)(…

Mondrian系列(五)-深入维度、层次和级别(6)-功能依赖优化

在一些情况中&#xff0c;可以通过采用已知的功能依赖优势来在数据处理过程中优化性能。这种依赖是典型的与产生数据相关的业务规则之结果&#xff0c;通常不能通过数据本身而推断。 在Mondrian中&#xff0c;功能依赖(Functional dependency)使用元素的属性以及元素的属性声明…

【调整数组顺序使奇数位于偶数前面】C++

[编程题]调整数组顺序使奇数位于偶数前面 时间限制&#xff1a;1秒 空间限制&#xff1a;32768K 输入一个整数数组&#xff0c;实现一个函数来调整该数组中数字的顺序&#xff0c;使得所有的奇数位于数组的前半部分&#xff0c;所有的偶数位于位于数组的后半部分&#xff0c;并…