【问题标题】:Data Wrangling for Analysis Services CubeAnalysis Services 多维数据集的数据整理
【发布时间】:2018-08-21 17:33:30
【问题描述】:

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

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 中是否有可以帮助我的工具?由于数据集非常大,无法暴力破解

最好的

【问题讨论】:

  • 您应该能够重塑数据,从每个值中提取年份(数字部分),然后再次重塑。
  • 这到底是什么意思? “我一直在使用 SQL Server 集成工具来完成此任务,但无济于事。”

标签: r sql-server database ssis ssas


【解决方案1】:

你有一个 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

【讨论】:

    【解决方案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);
    

    【讨论】:

      【解决方案3】:

      一种选择是使用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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-27
        • 2014-03-10
        相关资源
        最近更新 更多