【问题标题】:Combine Columns with similar measures in Crosstab in Cognos/SQL在 Cognos/SQL 的 Crosstab 中将列与类似度量组合
【发布时间】:2014-03-04 03:30:49
【问题描述】:

所以我有一个交叉表来衡量在单个设施中花费的小时数。我们的行分隔工作时间的任务类型,列分隔工作时间所在的设施。

我遇到的问题是,在我们的数据库中,我们有 2 个级别的设施。每个 1 级设施在其下方有 10 个 2 级“子”系统。我们想要的是能够将所有 2 级设施列的数据滚动到它们各自的 1 级设施父级中。

我在下面提供了一个示例。第一个 t̶a̶b̶l̶e̶ 交叉表是我拥有的,我想进入第二个 t̶a̶b̶l̶e̶ 交叉表。

因此,在我们的系统中,“父”和“子”设施通过名为 OBJ_PARENT 的字段连接。每个“子”在 OBJ_PARENT 中都有其“父”的名称。

我会根据要求提供我编写的 SQL。

编辑:我在下面提供了我当前的 SQL

select EVT_WORKORDER, EVT_DEPARTMENT, EVT_WOSTATUS, EVT_WOTYPE, EVT_FACILITY, OBJ_FACILITY, OBJ_PMD, OBJ_PARENT, BOO_HOURS, BOO_DATE, BOO_ENTERED, BOO_ACTIVITY, BOO_PERSON,  ACT_ACTIVITY, ACT_TASK, ACT_WORKORDER, PRV_CODE, PRV_PROPERTY, PRV_VALUE,
sum(case when boo_person <> 'UNPAID' then boo_hours else 0 end ) "Paid Hours",
sum( boo_hours ) "All Hours"
FROM R5EVENTS
JOIN R5OBJECTS ON EVT_FACILITY = OBJ_FACILITY
JOIN R5BOOKEDHOURS ON BOO_EVENT = EVT_WORKORDER
join R5ACTIVITIES on EVT_WORKORDER = ACT_WORKORDER
JOIN r5propertyvalues ON ( ACT_TASK || '#0' = PRV_CODE)
where prv_property = 'CORESRV'
 and ACT_ACTIVITY= BOO_ACTIVITY
AND EVT_DEPARTMENT = 'PK-MAINT'
AND EVT_WOTYPE IN ('JOB', 'PPM')
AND EVT_WOSTATUS IN ('R', 'FC', 'C', 'H', 'FI', 'CI', 'AP', 'IP', 'DF')
and OBJ_PMD in (#PROMPTMANY ('PMD')#)
and (OBJ_FACILITY in (#PROMPTMANY ('Park')#)
        OR
        OBJ_PARENT in ( SELECT OBJ_FACILITY from R5OBJECTS where OBJ_FACILITY in (#PROMPTMANY ('Park')#)))
group by EVT_WORKORDER, EVT_DEPARTMENT, EVT_WOSTATUS, EVT_WOTYPE, EVT_FACILITY, OBJ_FACILITY, OBJ_PMD, OBJ_PARENT, BOO_HOURS, BOO_DATE, BOO_ENTERED, BOO_ACTIVITY, BOO_PERSON,  ACT_ACTIVITY, ACT_TASK, ACT_WORKORDER, PRV_CODE, PRV_PROPERTY, PRV_VALUE

BOO 代表“已预订”

【问题讨论】:

  • 如果你的表在数据库中看起来像这样,你需要阅读规范化。

标签: sql cognos


【解决方案1】:

正确的方法是:

  • 在数据库中创建真正的层次结构表
  • 让所有子级(在这种情况下,按照您的数据存储方式,还包括您所说的级别 1)与父级相关
  • FM 中的模型,以便事实表连接到子维度表中
  • 从层次结构表中公开父对象
  • 将父对象带入交叉表的上边缘

如果你想快速而肮脏地做到这一点,请使用某种字符串函数来切断设施的“子”部分。

【讨论】:

  • 很遗憾,由于许可权,我们无法在系统中创建新表。
  • 这是凯文的常事。许多公司所做的是创建自己的报告数据库,然后设置 ETL,每晚将数据从 3rd 方数据库中提取到报告数据库中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多