Microstrategy 使用特定文本应用简单

问题描述

在 Microstrategy 中,我试图创建一个新事实,该事实根据字段 NAME 中包含的文本类型返回特定名称。以下是我尝试过的,但没有奏效。

ApplySimple("case when #0 contains 'As Is' then 'As Is' when contains 'New' then 'New' ELSE 'Other' END",[NAME])

解决方法

这里有几件事要提一下。 首先我不认为你真的想要一个事实,这对我来说就像一个属性。事实通常包含一些可以应用诸如 sum/avg/etc 之类的操作的内容。此外,您可以计算属性值,甚至可以使用 f.e. 将属性值“转换”为度量值。 “最大([属性])”。

我不会说你真的想要一个事实是不可能的,但是除了最小/最大/计数之外的任何东西都不会产生合理的结果。因为“Sum('Other')”是什么意思(除了在你的数据库上产生错误)?

除此之外,您的声明中还有另外两件事是行不通的。

  1. 第二个 CASE 条件必须重复与 #0/[NAME] 的比较,即“当 #0 包含‘NEW’时”。为此,您可以在查询中重复使用位置参数,无需为此传递重复的参数。
  2. 您不能在 applysimple 查询中使用 MSTR 函数,您必须使用特定于数据库的代码。这是直通功能的缺点之一。我认为这在这里不会有问题,只是在切换数据库时需要注意的事项。

此外,当您发布错误消息和生成的 SQL 代码时,检查您要查找的内容会更容易。

这应该可以工作(用一些有意义的东西替换正则表达式,您是否希望这种不区分大小写等):ApplySimple("case when #0 ~ 'As Is' then 'As Is' when #0 ~ 'New' then 'New' ELSE 'Other' END",[NAME])