Olá Mark
Também tenho pensado nessas linhas. Uma solução como essa seria ótima, e o tempo não é um problema, mas o estado do cliente está relacionado com a relação entre os pedidos em um período de tempo especificado pelo usuário, que está sempre mudando.
Assim, os usuários finais querem saber durante um certo período de tempo quantos usuários eram novos e qual a proporção que retornou para nós.
Uma possível solução seria dizer que os usuários finais só podem relatar essa informação através de períodos estabelecidos, como trimestres; então, sua sugestão seria ideal, pois poderia executar esse cálculo no ETL. Suponho que descer para o nível mensal tornaria tudo muito complicado.
Até agora, a tabela derivada tem funcionado bem, apenas quando filtrada pelo valor real do pedido as coisas se complicam. Como mencionei a Durgamadhab Mishra, poderia simplesmente adicionar um aviso de valor do pedido à tabela derivada e à tabela de fatos, para que replique meu SQL aqui:
SELECT
CASE WHEN min_prev = 0 AND ords = 1 THEN 0
WHEN min_prev = 0 AND ords > 1 THEN 1
ELSE 2 END AS KS,
uni_usr_id
FROM
(SELECT uni_usr_id, min(prev_orders) min_prev, count(DISTINCT order_id) ords, sum(`netto_eur`) netto_eur
FROM
fact_orders fo
WHERE fo.order_date BETWEEN '2012-01-01' AND '2012-03-31'
AND EXISTS
(SELECT fo2.order_id, sum(netto_eur) net_eur
FROM fact_orders fo2
WHERE fo.order_id = fo2.order_id
GROUP BY fo2.order_id
HAVING net_eur >= 20)
GROUP BY uni_usr_id) a
ORDER BY KS
;
A vantagem do BusinessObjects aqui é que este aviso aparece apenas uma vez para o usuário.
Saudações
Richard