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