Analysis Services多维数据集的数据整理

时间:2018-08-21 17:33:30

标签: r sql-server database ssis ssas

我有一个如下的数据集(简化):

Fund    Field1-2012    Field1-2013    Field2-2012   Field2-2013
 FD1       x               x               x            x
 FD2       x               x               x            x

如您所见,字段中存在日期,这对于大多数分析而言非常不友好。想要的是以下

Fund   Year   Field1   Field2
 FD1    2012   x          x
 FD1    2013   x          x
 FD2    2012   x          x
 FD2    2013   x          x

我一直在使用SQL Server集成工具来完成此操作,但无济于事。有没有我应该使用的工具,还是Excel中有可以帮助我的工具?数据集很大,无法蛮力

最佳

3 个答案:

答案 0 :(得分:3)

您有一个R标签,所以这是一个R解决方案:

df = read.table(text = "
Fund    Field1-2012    Field1-2013    Field2-2012   Field2-2013
FD1       5               7               9            10
FD2       6               8               9            10
", header=T)

library(tidyverse)

df %>%
  gather(key, value, -Fund) %>%
  separate(key, c("type","year"), convert = T) %>%
  spread(type, value)

#   Fund year Field1 Field2
# 1  FD1 2012      5      9
# 2  FD1 2013      7     10
# 3  FD2 2012      6      9
# 4  FD2 2013      8     10

答案 1 :(得分:2)

您可以使用apply取消显示数据:

select t.Fund, tt.year, tt.Field1, tt.Field2
from table t cross apply
     ( values (2012, [Field1-2012], [Field2-2012]), 
              (2013, [Field1-2013], [Field2-2013]) 
     ) tt (year, Field1, Field2);

答案 2 :(得分:1)

一种选择是使用union all

select fund, 2012 as year, Field1-2012 as field1, Field2-2012 as field2
from yourtable
union all
select fund, 2013 as year, Field1-2013 as field1, Field2-2013 as field2
from yourtable