在命名计算表达式中声明局部变量

Declare a local variable in named calculation expression

我想为年龄创建一个命名计算字段,并且我想在如下表达式中声明一个局部变量,但它不起作用:

DECLARE
@age INT;

@age=DateDiff("yyyy",DATE_NAIS,getdate());

CASE WHEN @age<=10 THEN  1
WHEN @age>10 AND @age<=20 THEN 2
WHEN @age>20 AND @age<=35 THEN 3
ELSE 4
END

正确,您不能像您尝试做的那样在 SELECT 表达式的上下文中声明变量。

您有几个不同的选择,digital.aaron 在他的评论中给出了其中之一。

另一种是在 CTE 中将其创建为人工列,然后从 CTE 中 select 而不是 table:

WITH cte AS (SELECT *, DateDiff("yyyy",DATE_NAIS,getdate()) AS age FROM MyTable)
SELECT CASE 
  WHEN age<=10 THEN  1
  WHEN age>10 AND age<=20 THEN 2
  WHEN age>20 AND age<=35 THEN 3
  ELSE 4
END AS SomeColumn
FROM cte

这个问题是用 SSAS 标记的,所以我猜你是在多维数据集中做的?以下 DAX 公式将用作模型中的计算列,用于 post 中描述的内容。正如评论中所说 DATEDIFF 只会 return 当前年份和该人出生年份之间的差异,这就是为什么 YEARFRAC 用于获取年份的分数,然后通过 INT 函数将其 向下 舍入为最接近的整数。例如,50 岁 364 天的人将被视为 50,而不是 51。由于 TRUE() 作为 SWITCH 函数的第一个参数给出,这将评估每个条件,直到匹配找到了。

PersonAge:= 
    var Age = INT(YEARFRAC(YourTable[DATE_NAIS], TODAY()))

RETURN

SWITCH
    (TRUE(), 
    Age < 10, 1,
AND(
    Age > 10, 
    Age <= 20), 2,
AND(
    Age > 20, 
    Age <= 35), 3,
    4)