Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换SSIS派生列中的函数_Ssis - Fatal编程技术网

替换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。可怜可怜可怜的我