【问题标题】:How to write if statement with multiple conditions to create a calculated column如何编写具有多个条件的 if 语句来创建计算列
【发布时间】:2019-09-11 11:39:35
【问题描述】:

所以这可能很容易,但不知何故我找不到可行的解决方案。我的问题如下:

  • 在 ssas 的表格模型中,我想创建一个计算列
  • 如果满足某个条件,则应检查另一列的每一行,并根据满足哪个条件,将一个值返回到计算列中

示例:

我有一个文本列 A,其中包含以下字符串(每个字符串位于不同的行):

"DtD 24"; “SGK 12”; “STD 99”等

现在我想做的是编写一个公式,逐行检查上述列,然后

  1. 当它在字符串的某处找到“12”时,它应该返回“12”作为该行的值
  2. 当它在字符串的某处找到“24”时,它应该返回“24”作为该行的值

... 等等 4 种不同的情况。

我尝试使用 switch()、if()、find() 找到解决方案,但似乎都不起作用。有没有人给我一些建议,什么是解决这个问题的聪明方法?

非常感谢您!

【问题讨论】:

  • 欢迎来到 SO。请提供一些您迄今为止尝试过的示例,我相信您会得到一些帮助:)
  • 感谢您的提示 :) 下次我会确保包括我的尝试。幸运的是@janvanwerkhofen 已经在下面的回答中解决了我的问题。

标签: ssis ssas dax calculated-columns ssas-tabular


【解决方案1】:

这个公式应该适合你。您可以通过添加 IF 语句来扩展它以检查更多数字。请检查您正在运行的 SSAS 版本,因为 CONTAINSSTRING 函数仅适用于 >= SSAS 2019 CTP2.3。

Column =
IF (
    CONTAINSSTRING ( 'Table'[Column A], "12" ),
    12,
    IF (
        CONTAINSSTRING ( 'Table'[Column A], "24" ),
        24,
        IF ( CONTAINSSTRING ( 'Table'[Column A], "99" ), 99, BLANK () )
    )
)

如果您在旧版本上运行,您可以尝试不太清晰的 SEARCH 功能:

Column =
IF (
    (SEARCH("12", [Column A], 1, 0) > 0),
    12,
    IF (
        (SEARCH("24", [Column A], 1, 0) > 0),
        24,
        IF ( (SEARCH("99", [Column A], 1, 0) > 0), 99, BLANK () )
    )
)

【讨论】:

  • 非常感谢您的快速回复!您对“搜索”的建议就像一个魅力。遗憾的是,CONTAINSSTRING 不起作用,因为我们没有所需的 ssas 版本。
  • 请注意,您可以使用SWITCH ( TRUE (), <condition1>, <result1>, <condition2>, <result2>, ..., <conditionN>, <resultN>, [<else result, if no conditions matched>] ) 重构嵌套的IFs 以删除如此多的嵌套。
  • 酷 greggyb!在 SWITCH 中的第一个语句中苦苦挣扎,但这是一个很好的解决方法:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
  • 1970-01-01
  • 2022-11-29
  • 1970-01-01
  • 2014-10-20
  • 1970-01-01
相关资源
最近更新 更多