替换SSIS派生列中的函数
列替换SSIS派生列中的函数,ssis,Ssis,列 1 2 3 4 5 6 7 8 9 10 我有这个栏目的平均值, 我想将“0和平均值”之间的数字替换为字符串“低于平均值” 替换(列“[0,平均值]”,“下面”)-->但它不工作 如何实现这一点有什么想法吗?通常的方法是,您需要使用源数据两次。第一次计算列中所有值的平均值。因为你没有指定任何东西,所以如何到达那里的可能性是无穷的 如果源系统是rdbms,那么您只需在源查询中派生消息 SELECT D.[column] , AVG(D.[column]) OVER (ORDER
1
2
3
4
5
6
7
8
9
10
我有这个栏目的平均值,
我想将“0和平均值”之间的数字替换为字符串“低于平均值”
替换(列“[0,平均值]”,“下面”)
-->但它不工作
如何实现这一点有什么想法吗?通常的方法是,您需要使用源数据两次。第一次计算
列
中所有值的平均值。因为你没有指定任何东西,所以如何到达那里的可能性是无穷的
如果源系统是rdbms,那么您只需在源查询中派生消息
SELECT
D.[column]
, AVG(D.[column]) OVER (ORDER BY(SELECT NULL)) AS column_avg
, CASE WHEN AVG(D.[column]) OVER (ORDER BY(SELECT NULL)) >= D.[column] THEN CAST(D.[column] AS varchar(10))
ELSE 'below'
END AS ColumnAvgText
FROM
(
VALUES(1)
, (2)
, (3)
, (4)
, (5)
, (6)
, (7)
, (8)
, (9)
, (10)
)D([column]);
否则,您将需要聚合该列的平均值,然后将其存储到一个变量中-我将假定@[User::MyAverage]
然后在现有数据流中,添加一个名为ColumnAvgText的新列。此处的数据类型必须从原始数字类型更改为字符串,因为不能在数字字段中输入单词“below”
其语法类似于
(@[User::MyAverage >= column) ? ((DT_WSTR, 20) column) : "below"
(DT_WSTR,20)column
将column的值强制转换为string数据类型,这样表达式的两个结果都是string。为什么您希望上面的语法工作?它完全是虚构的?有没有办法更好地实现它?是否可以通过一次多播来实现?“我还没弄明白呢!”基思可能是这样,但要坚持下去会很难。派生列需要插入一个新列JoinColumn
,其值类似于0。多播输出1转到聚合转换,我们在其中进行平均并保留JoinColumn。然后一个Union All根据我们的JoinColumn将该流连接回多播输出2。然后是一个派生列,如我的回答中所述,不是Union All,Merge Join。可怜可怜可怜的我