KPIが何であるかわかりません。これがどのように機能するかについての「概念の証明」です。
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
テーブルでagg_type
クエリでハードコードされたものの中でなかった場合、それはまた、ヌルであろう;幸せ、ウェルの有限数があります定義された集約関数であるため、後者は避けることができます。)
集約のタイプを動的にするには、おそらく動的SQLを使用する必要があります(また、 'avg'を集計値の集合 - それはまれに数学的には正しい)。アーキテクチャ上、コードを書くことなく新しいKPIを定義できるとは思っていませんし、あるKPIを定期的に「平均」から「最小」に変更したいとは思いませんこれは、私がテーブルに保管するのが理にかなっているようなものではありません。 –
私たちは、毎月の値をファクトテーブルに提供するディメンションテーブルにkpiのリストを持っています。 –
@JustinCave - 動的なSQLが必要であるという疑問に対する答えを投稿しました。右?または私は何かを逃していますか? – mathguy