plsql 中的月度汇总
Month to year Aggregation in plsql
我有一个事实 table,其中我有每个 kpi 名称、kpi 的值及其所属的月份。我需要从月级到年级进行汇总。为了从月到年滚动,我将使用确认维度table(时间维度)来了解每个月的年份。
我面临的挑战是,当我从月到年汇总时,我不应该总是做 sum(kpi 值)。它将是 avg、min 或 max,具体取决于 kpi 类型。我将了解 kpi 维度 table,它具有 kpi 名称和 kpi 聚合类型。
我需要帮助才能针对所有 kpi 的聚合类型进行汇总。
我不知道什么是KPI;这是一个 "proof of concept" 这可能是如何工作的。
with
dim ( kpi, agg_type ) as (
select 1, 'max' from dual union all
select 2, 'avg' from dual
),
facts ( kpi, val ) as (
select 1, 100 from dual union all
select 1, 300 from dual union all
select 2, 14 from dual union all
select 2, null from dual union all
select 2, 20 from dual union all
select 3, 500 from dual
)
select f.kpi,
case max(d.agg_type) when 'max' then max(f.val)
when 'avg' then avg(f.val)
else null end as agg_val
from dim d right outer join facts f on d.kpi = f.kpi
group by f.kpi
;
KPI AGG_VAL
---------- ----------
1 300
2 17
3
(avg_val
在最后一行为空,如果 dim
table 中的 agg_type
不在那些硬-在查询中编码;幸运的是,定义明确的聚合函数的数量是有限的,因此可以避免后者。)
我有一个事实 table,其中我有每个 kpi 名称、kpi 的值及其所属的月份。我需要从月级到年级进行汇总。为了从月到年滚动,我将使用确认维度table(时间维度)来了解每个月的年份。
我面临的挑战是,当我从月到年汇总时,我不应该总是做 sum(kpi 值)。它将是 avg、min 或 max,具体取决于 kpi 类型。我将了解 kpi 维度 table,它具有 kpi 名称和 kpi 聚合类型。
我需要帮助才能针对所有 kpi 的聚合类型进行汇总。
我不知道什么是KPI;这是一个 "proof of concept" 这可能是如何工作的。
with
dim ( kpi, agg_type ) as (
select 1, 'max' from dual union all
select 2, 'avg' from dual
),
facts ( kpi, val ) as (
select 1, 100 from dual union all
select 1, 300 from dual union all
select 2, 14 from dual union all
select 2, null from dual union all
select 2, 20 from dual union all
select 3, 500 from dual
)
select f.kpi,
case max(d.agg_type) when 'max' then max(f.val)
when 'avg' then avg(f.val)
else null end as agg_val
from dim d right outer join facts f on d.kpi = f.kpi
group by f.kpi
;
KPI AGG_VAL
---------- ----------
1 300
2 17
3
(avg_val
在最后一行为空,如果 dim
table 中的 agg_type
不在那些硬-在查询中编码;幸运的是,定义明确的聚合函数的数量是有限的,因此可以避免后者。)