【问题标题】:Flattening a Periodic Snapshot Fact Table展平周期性快照事实表
【发布时间】:2014-09-18 16:17:02
【问题描述】:

我从一位客户那里得到了一个不寻常的报告要求,这真的让我很为难。我的来源是一个数据仓库定期快照事实表,每个公司期间每个客户有 1 条记录。他们需要的本质上是一个修改过的支点。

请考虑简化示例。我在此示例中使用了客户名称以使记录更易于理解,这是使用事实表和具有代理键的维度的真正解决方案。

IF OBJECT_ID ('tempdb..#PeriodicSnapshot') IS NOT NULL
   DROP TABLE #PeriodicSnapshot

CREATE TABLE #PeriodicSnapshot
(
   CompanyPeriod        INT
  ,CustomerName         VARCHAR (25)
  ,AdvancedThisPeriod   DECIMAL (9, 2)
  ,PaymentsThisPeriod   DECIMAL (9, 2)
)

Insert into #PeriodicSnapshot 
(CompanyPeriod, CustomerName, AdvancedThisPeriod, PaymentsThisPeriod)
Values
 (201401, 'Yoda', 200.00, 50.00)
,(201401, 'Darth Vader', 0, 0)
,(201402, 'Yoda', 0, 0)
,(201402, 'Darth Vader', 100.00, 20.00 )
,(201403, 'Yoda', 0, 50.00)
,(201403, 'Darth Vader', 0, 0)

我需要获取上面的表格并提供这样的结果,最好使用 T-SQL。

请注意,列名称是别名,因为粒度更改为每年一个客户。请记住,原始表中实际上有超过 30 列,它们也必须被展平。

我意识到这很糟糕,他们正在以这种方式滥用数据库。但是,客户坚持认为他们需要这种格式的数据来提供单独的预测算法。我唯一的另一种选择是实际实例化这些表,自 2008 年以来每年一个,并继续向前。

生成此数据集的查询不需要执行得特别好,因为它只会每周运行一次(针对本年度)和一个周末。

有什么建议吗?

【问题讨论】:

    标签: sql-server-2008 tsql data-warehouse


    【解决方案1】:

    我还没有弄清楚如何在 sql 中进行旋转,但是下面的代码可以工作

    with companyper as (
    select 
    CustomerName, 
    
    case when CompanyPeriod = '201401' then (AdvancedThisPeriod) end as 'AdvacnedThisPeroid_201401', 
    case when CompanyPeriod = '201401' then (PaymentsThisPeriod) end as 'PaymentsThisPeriod_201401', 
    case when CompanyPeriod = '201402' then (AdvancedThisPeriod) end as 'AdvacnedThisPeroid_201402', 
    case when CompanyPeriod = '201402' then (PaymentsThisPeriod) end as 'PaymentsThisPeriod_201402'
    
    from #PeriodicSnapshot )
    
    select
    CustomerName, 
    SUM(AdvacnedThisPeroid_201401) as ATP201401, 
    SUM(PaymentsThisPeriod_201401) AS PTP201401, 
    SUM(AdvacnedThisPeroid_201402) as ATP201402, 
    SUM(PaymentsThisPeriod_201402) AS PTP201402
    
    
    from
    companyper
    
    group by CustomerName
    

    【讨论】:

    • 或者您可以将查询放入excel并让excel将数据转出,右键单击,根据需要刷新。
    • 或者您可以运行一个相当简单的 MDX 查询。
    猜你喜欢
    • 2017-02-14
    • 1970-01-01
    • 2012-11-22
    • 2017-09-26
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多