【问题标题】:FINDSTRING multiple criteria for derived column in SSISSSIS 中派生列的 FINDSTRING 多个条件
【发布时间】:2022-10-04 23:33:58
【问题描述】:

我是 SSIS 新手,我在根据列中字符串的多个条件填充派生列时遇到问题。

例如,我设法让它使用单一标准:

FINDSTRING(OS,\"Server\",1) > 0 ? \"服务器\" : \"桌面\"

以上工作并将操作系统中的服务器填充到 \"server\" 并将其他所有内容填充到 \"Desktop\" 但我还有其他可以识别服务器的字符串。我尝试过的例子是:

FINDSTRING(OS,\"Server\", \"Red Hat\", \"AIX\",1) > 0 ? \"服务器\" : \"桌面\"

我基本上有大约 10 个关键字在 OS 列中标识一个服务器,所以我想在派生列中为这些服务器输出服务器,为没有这些字符串的任何内容输出桌面。

那可能吗?我想过做 10 个不同的查找字符串,但我认为输出会相互覆盖。

谢谢你。

  • 您可以使用 Transformation 类型的脚本组件并编写几行代码来检查字符串是否包含服务器或桌面。
  • OR|| 最有可能在两个选项之间使用:(FINDSTRING(OS,\"Server\", 1)>0 OR FINDSTRING(OS,\"Red Hat\",1)>0) ? \"Server\" : \"Desktop\"(请注意,RedHat(或 IBM、MicroSoft 等)不暗示服务器(或桌面))

标签: ssis derived


【解决方案1】:

那不是有效的语法,所以不,您直接尝试的内容将不起作用。

如果您有一个受限制的值列表,也就是您的服务器值的静态列表,那么我会采取在您的数据流中添加 10 个派生列的方法。

他们将采用以下模式在数据流中添加一个新的布尔(真/假)列。您不需要将这些值带入最终表格,但您将使用它们来计算这是桌面操作系统还是服务器操作系统的最终值。

DER HPUX

将派生列添加到数据流并将其命名为 DER HPUX,其中最后的单词是服务器关键字。然后,您将使用 FINDSTRING 语法向其中添加一个新列,并按照组件名称的行对其进行命名

hasHPUX  FINDSTRING(LOWER([OS]), "hpux") > 0

请注意,我已在此处明确将操作系统转换为小写,并对findstring 的参数执行相同操作,因为我不确定 Red Hat 是否永远是 Red Hat 而不是 Red Hat 或 RED HAT。您更了解您的数据,但如果数据格式不一致,这可能会有所帮助。

对所有关键字重复此模式

DER IsServer

在这里,我将创建另一个名为 IsServer 的中间列,我要做的就是 OR 所有前面的 has* 命名

hasHPUX || hasRedHat || hasAix || etc

DER 确定服务器或桌面

最后,我们准备好使用新创建的 isServer 列来填充列 OSClass 或任何您想要的名称

(isServer) ? "Server" : "Desktop"

哇,这是很多工作,为什么你会做所有这些?

测试。

您无法调试表达式。通过将所有复杂的逻辑分解成小块,您可以在包中的 DER isServer 之后放置一个数据查看器,并且一眼就能确定为什么某些东西设置了适当的标志值或没有设置适当的标志值。

当然,您可以像您正在尝试的语法一样在单个表达式中执行此操作,但不这样做可以帮助您未来的自己。当您的表达式太长而无法在编辑器中看到所有内容时,是时候将其分解为更小的单元了。

(FINDSTRING(LOWER([OS]), "hpux") > 0 || FINDSTRING(LOWER([OS]), "red hat") > 0 || FINDSTRING(LOWER([OS]), "aix")> 0 || etc) ? "Server" : "Desktop"

参考

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多