as 2008里关于维度排序问题

本文介绍如何使用SQL创建日期维度表,并在AS2008中对其进行配置以实现灵活的数据展示和查询。通过创建包含年、月、季度等字段的日期表,并设置正确的排序规则,可以有效提升数据分析效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

日期维度一般都是做成层级,这样在前段展示的时候比较方便,日期维度一遍粒度比较灵活,一般包括年、半年、季度、月、旬、日、

第一步:建立日期表,

---------建立日期对照表
create table 日期(日期 datetime primary key ,
月 as case replace(datename(month,日期),'0','')
when '1' then '一月'
when '2' then '二月'
when '3' then '三月'
when '4' then '四月'
when '5' then '五月'
when '6' then '六月'
when '7' then '七月'
when '8' then '八月'
when '9' then '九月'
when '10' then '十月'
when '11' then '十一月'
when '12' then '十二月'
else '0' end
,
季度 as ('第'+case datename(quarter,日期)
when '1' then '一'
when '2' then '二'
when '3' then '三'
when '4' then '四'
else '0' end
 +'季度'),
财年 as (datename(year,日期)+'财年'))


------------------------------------- 插入数据


declare @a int,@b datetime
set @b='2004-01-01'
set @a=0
while(@a<4000)
begin
insert into 日期(日期)
select @b

select @b=dateadd(day,1,@b) ,@a=@a+1
end

select * from 日期

上边是用计算列完成的计算,笔者比较懒,呵呵

第二步:打开as 2008,建立数据源,数据源视图,这个就不详细说了,建立维度,键列选择日期,属性包括,年,月,季度,日,建立好了以后我们在建立层次结构,这样是方便在前台的钻取,如下图:

 

这样子建立以后会发现出来的顺序是乱的,因为这里都是汉字,as引擎本身是按照ascci来排的,所以我们必须指定排序。

 

的师傅

 

 

在数据源视图上新建两列派生列,主要是为了排序用,

季度排序:case
季度
when '第一季度' then 1
when '第二季度' then 2
when '第三季度' then 3
when '第四季度' then 4
else 0 end

月度排序:

case 月
when '一月' then 1
when '二月' then 2
when '三月' then 3
when '四月' then 4
when '五月' then 5
when '六月' then 6
when '七月' then 7
when '八月' then 8
when '九月' then 9
when '十月' then 10
when '十一月' then 11
when '十二月' then 12
else 0 end

见下图:

 

 

然后月排序和季度排序添加月排序和季度排序的属性,在给维度添加属性的时候,我们发现AS2008和AS2005有点区别,AS2005可以直接把属性从数据源视图里拖拽到维度下边,而AS2008把维度属性这块独立出来,我们需要通过界面来设置,

在这里的元属性选择【季度】,相关属性我们选择【季度排序】,月度如上,详细见下图:

 

详细见下图:1

 

 

 

 

 

打开月和季度的属性窗口,在orderby选项里选择AttributeKey,在下边orderby的attributekey里选择月排序或季度排序见下图:

 

这样处理维度以后,就会按照你指定的顺序出来的:

 

### 使用 NumPy 按照指定维度对数组排序 NumPy 提供了 `argsort` 函数用于返回数组排序后的索引位置,进而可以通过这些索引获取排序后的数组[^1]。 对于一维数组而言: ```python import numpy as np a = np.array([1, 10, 4, 8, 2, 3]) b = np.argsort(a) c = a[b] print(b) # 输出: [0 4 5 2 3 1] print(c) # 输出: [ 1 2 3 4 8 10] ``` 上述代码展示了如何通过 `np.argsort()` 获取到原数组中元素对应的排序后的新索引,并利用该索引来重新排列数组达到升序的效果。 当处理多维数组并希望沿特定轴进行排序时,可以设置参数 `axis` 来指明操作的方向。下面的例子说明了怎样在一个二维矩阵的不同方向上执行排序操作: #### 对于二维或多维数组,在不同维度上的排序 考虑一个简单的例子来展示沿着不同的轴进行排序的过程: ```python import numpy as np arr = np.array([[6, 3, 6, 4], [3, 1, 2, 0], [3, 1, 8, 3]]) # 默认情况下会沿着最后一个轴(-1),即每一行内分别排序 sorted_by_last_axis = np.sort(arr, axis=-1) print("Original Array:") print(arr) print("\nSorted along the last axis (rows):") print(sorted_by_last_axis) # 如果想要改变排序的轴线,比如按列排序,则需调整 'axis' 参数值为 0 sorted_by_first_axis = np.sort(arr, axis=0) print("\nSorted along the first axis (columns):") print(sorted_by_first_axis) ``` 这段程序先定义了一个三维数组 `arr` ,接着演示了两种方式对其进行排序:一种是在每行内部单独排序;另一种则是跨过各行在整个列之间比较大小来进行全局性的排序。 此外,还可以使用更复杂的排序逻辑,例如基于多个键(字段)组合起来决定最终顺序的情况。这通常涉及到 `lexsort` 方法的应用,它允许用户传入一系列关键字作为排序依据[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值