Tableau数据源建立及17万条记录

Datasource Establishment in Tableau and 170,000 records

我有两个 EXCEL 数据源。 175,000 行。我正在尝试使用两个数据源之间的 INNER 选项设置连接(添加新连接子句)。左侧数据源包括某些成员 ID #s。不幸的是,正确的数据源的成员 id #s 在一个名为 member Desc 的大字段中。如下所示,

左侧数据源 会员编号# ALL89098

数据源权限 会员描述 YTRNNN TO=ALL89098_KIA 是或不是 或 POALL89098 乔

所以,正如您从上面注意到的那样,我需要处理两种情况。成员 ID 在 TO= 之后的 Member Desc 中,它可以在任何地方,如场景 2 POALL89098

如果我无法在 Tableau 中完成此操作以在来自不同数据源的这两列之间建立连接,因为我已将这两个数据源加载到 SQL 服务器数据库中,我可以 运行 SQL SQL 中的语句,因为它们也在 SQL 服务器数据库中的两个不同表中。

我正在尝试在 Tableau 中使用 CONTAINS 子句,如下所示,但它 运行 非常非常慢。它只是具有 16 GB Ram 的 Tableau Desktop。

if contains([Member Desc],([Member id #])则 [会员ID #] 别的 "NOT FOUND" 结束

非常感谢您的宝贵时间。

那么,有没有办法在 IF AND ELSE 或 CASE 语句中包含正则表达式?

我认为您将不得不找到一种方法从 SQL 中的成员 desc 中删除成员 ID。会员 ID 应该有某种模式。 例如,它总是 3 个字母后跟 5 个数字或类似的东西。 如果你能想出一个模式,那么你可以使用 SQL 和 Substring、Charindex、and/or 的一些组合,比如 %Text% 或正则表达式 在将 SQL 服务器 table 中的实际成员 ID 作为其自己的字段带入 Tableau 之前删除的模式。

您可以创建连接计算。突出显示的下拉列表显示了在哪里可以找到它:

只要[Member Desc]中Member ID的格式有一定规律,就可以用Regex提取出来。正如您在问题中提到的,ID 可能出现的一种方式是在 "TO=" 之后,它看起来像是在“_”之前结束。以下正则表达式计算字段将拉取两者之间的字符串:

REGEXP_EXTRACT([Member Desc],"([^TO=]*)(?=_)")

结果应正确连接两个数据源:

以上是一个大纲,我希望它能让你走上正确的道路。我意识到 [Member ID] 可能有几种不同的显示方式,所以我无法确定确切的正则表达式,但如果有任何模式,那么上面的格式应该可以工作。 (即:即使唯一的模式是 [会员 ID] 是三个字母后跟四个数字 - 或者它总是以 A 开头并以其他内容结尾 - 等等)

正则表达式也应该比 contains() 函数执行得更好,但请注意,该函数确实需要搜索每一行中的每个字符串才能进行连接。

编辑回复评论:

要添加多个条件,请尝试以下方法:

IF LEN(REGEXP_EXTRACT([Member Desc],"([^FROM=]*)(?=,)")) > 0
THEN REGEXP_EXTRACT([Member Desc],"([^FROM=]*)(?=,)")
ELSEIF LEN(REGEXP_EXTRACT([Member Desc],"([^TO=]*)(?=,)")) > 0
THEN REGEXP_EXTRACT([Member Desc],"([^TO=]*)(?=,)")
ELSEIF [...Put as many of these as might match your pattern]
THEN [...Put as many of these as might match your pattern]
END

本质上,计算是沿着列表向下并尝试每一种可能性。我稍微更改了你的以查看返回值的长度 (LEN()),它应该相当快地进行比较,因为它是一个整数。当此计算遍历每个 ELSEIF 并找到匹配项时,它将停止遍历列表——因此将最可能的匹配项放在顶部很重要。计算字段的结果应该是会员 ID。如果没有匹配项,则实际上不需要 ELSE 语句,因为 Inner Join 会自动排除它。

编辑回复评论: 谢谢你。我看到了你的建议。