Is there a way to simply this calculated column expression?
case
when ((
case [KPI (RAG)*]
when "R" then 1
when "A" then 2
when "G" then 3
end) - sum(case [KPI (RAG)*]
when "R" then 1
when "A" then 2
when "G" then 3
end) OVER (intersect([ASSET],previous([QUARTER]))))<0 then "D"
when ((
case [KPI (RAG)*]
when "R" then 1
when "A" then 2
when "G" then 3
end) - sum(case [KPI (RAG)*]
when "R" then 1
when "A" then 2
when "G" then 3
end) OVER (intersect([ASSET],previous([QUARTER]))))>0 then "U"
when ((
case [KPI (RAG)*]
when "R" then 1
when "A" then 2
when "G" then 3
end) - sum(case [KPI (RAG)*]
when "R" then 1
when "A" then 2
when "G" then 3
end) OVER (intersect([ASSET],previous([QUARTER]))))=0 then "S"
end
I would like to declare a function or variable to avoid smelly code. Something like this:
def caseKPI() :
case [KPI (RAG)*]
when "R" then 1
when "A" then 2
when "G" then 3
end
case
when (caseKPI() - sum(caseKPI())
OVER (intersect([ASSET],previous([QUARTER]))))<0 then "D"
when (caseKPI() - sum(caseKPI())
OVER (intersect([ASSET],previous([QUARTER]))))>0 then "U"
when (caseKPI() - sum(caseKPI())
OVER (intersect([ASSET],previous([QUARTER]))))=0 then "S"
end
or even better:
def caseKPI() :
case [KPI (RAG)*]
when "R" then 1
when "A" then 2
when "G" then 3
end
def trend() :
caseKPI() - sum(caseKPI()) OVER (intersect([ASSET],previous([QUARTER])))
case
when trend()<0 then "D"
when trend()>0 then "U"
when trend()=0 then "S"
end
In other words, can we declare local variables or functions within the expression?