我有一个.txt文件作为源,文件视图的一部分在下面(所有价格列都以DT_R4
开头)
Quantity Partner Share Customer Price
1 0 0
1 0 0
3 0.7 0.99
2 1.4 1.99
1 -1.4 -1.99
问题是我正在使用派生列基于这些价格列创建一个新列Discount
,并且由于某些原因,当价格为0时,它不起作用。派生列转换下方:
(DT_NUMERIC,18,2)((ABS([Customer Price]) - [Partner Share]) / ABS([Customer Price]) * 100)
如果我忽略价格为0的行,那么一切正常,但我也需要这些:(
我猜测可能是因为表达式将为0/0,但我不知道如何解决。
以下是错误:
[派生列[297]]错误:尝试执行以下操作时发生错误 执行类型转换。
[派生列[297]]错误:SSIS错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 “组件“派生列” (297)”失败,因为发生了错误代码0xC0049064,并且该错误 “输出列“折扣”(376)”上的行配置指定失败 错误。指定对象的指定对象发生错误 零件。在此之前可能会发布错误消息,并提供更多信息 有关失败的信息。
[SSIS.Pipeline]错误:SSIS错误代码 DTS_E_PROCESSINPUTFAILED。组件上的ProcessInput方法 “派生列”(297)失败,错误代码为0xC0209029 处理输入“派生列输入”(298)。确定的 组件从ProcessInput方法返回错误。错误是 特定于组件,但错误是致命的,将导致 数据流任务停止运行。可能发布了错误消息 在此之前,有关失败的更多信息。
感谢您的帮助,谢谢!
答案 0 :(得分:2)
您可以尝试在12.34
的表达式中使用Conditional Operator
,如下所示。
Derived Column
希望它对您有用。
答案 1 :(得分:0)
尝试使用TRY_CAST
运算符,如果使用0,请使用ISNULL
:
(DT_NUMERIC,18,2)((ABS( ISNULL(TRY_CAST([Customer Price] AS int), 0)) - [Partner Share])
/ ABS( ISNULL(TRY_CAST([Customer Price] AS int), 1)) * 100)
看起来有些字符串无法转换为整数。在数据流中添加一些错误处理,并将错误行路由到平面文件,以便您可以检查它们。