twitter 白丝 Tableau 中创建估量打算的最好作念法


发布日期:2024-08-20 08:06    点击次数:169

twitter 白丝 Tableau 中创建估量打算的最好作念法

本文先容在 Tableau 中创建高效估量打算的多少辅导和准则。这些准则旨在匡助您优化职责簿性能。关系可提高职责簿性能的总共样式的详备信息twitter 白丝,请参见优化职责簿性能系列。

一般限定:幸免在另一个估量打算中使用某个估量打算字段屡次

在另一个估量打算中援用团结估量打算字段屡次将导致性能问题。要是您在估量打算内使用估量打算字段(也称为创建嵌套估量打算),请尝试只在估量打算中援用该估量打算字段一次。

请在意,在估量打算中援用某个字段(末端字段)屡次应该不会使性能左迁。

示例

假定您创建一个估量打算字段,该字段使用复杂的多行估量打算在推文中查找说起(或推特用户名)。估量打算字段名为“Twitter Handle”(推特用户名)。复返的每个用户名以“@”符号来源(举例:@user)。

为了便于分析,您思要移除“@”符号。

为此,您不错使用以下估量打算来从字符串中移除第一个字符:

RIGHT([Twitter Handle], LEN([Twitter Handle]) -1)

此估量打算稀奇偶而。然而,由于它援用了“Twitter Handle”(推特用户名)估量打算两次,因此会为数据源中的每笔记载扩张该估量打算两次:一次针对 RIGHT 函数扩张,另一次针对 LEN 函数扩张。

为了幸免估量打算团结个估量打算屡次,您不错将估量打算改写为只使用“Twitter Handle”(推特用户名)估量打算一次。在本例中,您不错使用 MID 来完成沟通观念:

MID([Twitter Handle], 2)

辅导 1:将多个等式比拟调节为 CASE 抒发式或组

假定您有以下估量打算,该估量打算使用估量打算字段“Person (calc)”屡次,并使用一系列 OR 函数。此估量打算尽管是一个偶而的逻辑抒发式,但会导致查询性能问题,因为它会扩张“Person (calc)”估量打算至少十次。

IF [Person (calc)] = 'Henry Wilson'OR [Person (calc)] = 'Jane Johnson'OR [Person (calc)] = 'Michelle Kim'OR [Person (calc)] = 'Fred Suzuki'OR [Person (calc)] = 'Alan Wang'THEN 'Lead'ELSEIF [Person (calc)] = 'Susan Nguyen'OR [Person (calc)] = 'Laura Rodriguez'OR [Person (calc)] = 'Ashley Garcia'OR [Person (calc)] = 'Andrew Smith'OR [Person (calc)] = 'Adam Davis'THEN 'IC'END

请尝试以下处置有筹划,而不是使用等式比拟。

处置有筹划 1

使用 CASE 抒发式。举例:

CASE [Person (calc)]WHEN 'Henry Wilson' THEN 'Lead'WHEN 'Jane Johnson' THEN 'Lead'WHEN 'Michelle Kim' THEN 'Lead'WHEN 'Fred Suzuki' THEN 'Lead'WHEN 'Alan Wang' THEN 'Lead'WHEN 'Susan Nguyen' THEN 'IC'WHEN 'Laura Rodriguez' THEN 'IC'WHEN 'Ashley Garcia' THEN 'IC'WHEN 'Andrew Smith' THEN 'IC'WHEN 'Adam Davis' THEN 'IC'END

在本例中,只援用了估量打算字段“Person (calc)”一次。因此该估量打算也只会扩张一次。CASE 抒发式在查询管说念中还得到了进一步优化,因此性能得以非常普及。

处置有筹划 2

创建组,而不是估量打算字段。关系详备信息,请参见对数据进行分组。

辅导 2:将多个字符串估量打算调节为单一 REGEXP 抒发式

在意:REGEXP 估量打算仅在使用 Tableau 数据索取或结合到文本文献、Hadoop Hive、Google BigQuery、PostgreSQL、Tableau 数据索取、Microsoft Excel、Salesforce、Vertica、Pivotal Greenplum、Teradata(版块 14.1 及更高版块)和 Oracle 数据源时可用。关系详备信息,请参见其他函数。

示例 1:CONTAINS

假定您有以下估量打算,该估量打算使用估量打算字段“Category (calc)”屡次。此估量打算尽管亦然一个偶而的逻辑抒发式,但会导致查询性能问题,因为它会扩张“Category (calc)”估量打算屡次。

IF CONTAINS([Segment (calc)],'UNKNOWN')OR CONTAINS([Segment (calc)],'LEADER')OR CONTAINS([Segment (calc)],'ADVERTISING')OR CONTAINS([Segment (calc)],'CLOSED')OR CONTAINS([Segment (calc)],'COMPETITOR')OR CONTAINS([Segment (calc)],'REPEAT')THEN 'UNKNOWN'ELSE [Segment (calc)] END

您不错使用 REGEXP 抒发式来取得相似的效果,而无用进行相似的叠加。

处置有筹划

IF REGEXP_MATCH([Segment (calc)], 'UNKNOWN|LEADER|ADVERTISING|CLOSED|COMPETITOR|REPEAT') THEN 'UNKNOWN'ELSE [Segment (calc)] END

关于使用肖似方法的字符串估量打算,您不错使用沟通的 REGEXP 抒发式。

示例 2:STARTSWITH

IF STARTSWITH([Segment (calc)],'UNKNOWN')OR STARTSWITH([Segment (calc)],'LEADER')OR STARTSWITH([Segment (calc)],'ADVERTISING')OR STARTSWITH([Segment (calc)],'CLOSED')OR STARTSWITH([Segment (calc)],'COMPETITOR')OR STARTSWITH([Segment (calc)],'REPEAT')THEN 'UNKNOWN'

处置有筹划

IF REGEXP_MATCH([Segment (calc)], '^(UNKNOWN|LEADER|ADVERTISING|CLOSED|COMPETITOR|REPEAT)') THEN 'UNKNOWN'ELSE [Segment (calc)] END

请在意,此处置有筹划中使用“^”符号。

示例 3:ENDSWITH

IF ENDSWITH([Segment (calc)],'UNKNOWN')OR ENDSWITH([Segment (calc)],'LEADER')OR ENDSWITH([Segment (calc)],'ADVERTISING')OR ENDSWITH([Segment (calc)],'CLOSED')OR ENDSWITH([Segment (calc)],'COMPETITOR')OR ENDSWITH([Segment (calc)],'REPEAT')THEN 'UNKNOWN'ELSE [Segment (calc)] END

处置有筹划

IF REGEXP_MATCH([Segment (calc)], '(UNKNOWN|LEADER|ADVERTISING|CLOSED|COMPETITOR|REPEAT)$') THEN 'UNKNOWN'ELSE [Segment (calc)] END

请在意,此处置有筹划中使用“$”符号。

辅导 3:使用 REGEXP(而不是 LEFT、MID、RIGHT、FIND、LEN)操作字符串

正则抒发式可能是一种稀奇高大的器具。在扩张复杂的字符串操作时,请接洽使用正则抒发式。在许厚情况下,使用正则抒发式会使估量打算愈加苟简高效。关系正则抒发式的详备信息,请参见 Tableau 博客上的 Become a regex regular and wrangle imperfect data(成为正则抒发式精英并照应不完好的数据)(结合在新窗口中怒放)博文。

示例 1

假定您有以下估量打算,该估量打算从 URL 中移除合同。举例:“https://www.tableau.com”变为“www.tableau.com”。

IF (STARTSWITH([Server], "http://")) THEN MID([Server], Len("http://") + 1)ELSEIF(STARTSWITH([Server], "https://")) THEN MID([Server], Len("https://") + 1)ELSEIF(STARTSWITH([Server], "tcp:")) THEN MID([Server], Len("tcp:") + 1)ELSEIF(STARTSWITH([Server], "\\")) THEN MID([Server], Len("\\") + 1)ELSE [Server]END

处置有筹划

可通过使用 REGEXP_REPLACE 函数来简化估量打算和提高性能。

REGEXP_REPLACE([Server], "^(http://|https://|tcp:|\\\\)", "")

示例 2

假定您有以下估量打算,该估量打算复返 IPv4 地址的第二部分。举例:“172.16.0.1”变为“16”。

IF (FINDNTH([Server], ".", 2) > 0) THENMID([Server],FIND([Server], ".") + 1,FINDNTH([Server], ".", 2) - FINDNTH([Server], ".", 1) - 1)END

肛交颜射处置有筹划

可通过使用 REGEXP_EXTRACT 函数来简化估量打算和提高性能。

REGEXP_EXTRACT([Server], "\.([^\.]*)\.")

辅导 4:不要在估量打算中使用集

要是在估量打算中使用集,请接洽将集替换为一个替代等效估量打算。

示例

假定您有以下估量打算,该估量打算使用集“Top Customers (set)”。

IF ISNULL([Customer Name]) OR [Top customers (set)] THEN [Segment] ELSE [Customer Name] END

处置有筹划 1

要是集很偶而,您不错创建一个其复返效果与集沟通的估量打算字段。举例:

CASE [Customer Name]WHEN 'Henry Wilson' THEN TrueWHEN 'Jane Johnson' THEN TrueWHEN 'Michelle Kim' THEN TrueWHEN 'Fred Suzuki' THEN TrueWHEN 'Alan Wang' THEN TrueELSE FalseEND

在意:提倡在此情况下使用方法 WHEN TRUE … ELSE,以幸免由于使用集而导致的性能问题。大盛大情况下不保举使用该方法。

处置有筹划 2

要是集比拟复杂,请接洽创建一个组,该组将斟酌的总共元素映射到一个给定的值或属性(举例“IN”),然后修改估量打算来检讨该值/属性。举例:

IF ISNULL([Customer Name]) OR [Top Customers(group)]='IN' THEN [Segment] ELSE [Customer Name] END

关系详备信息,请参见对数据进行分组和创建集。

辅导 5:不要使用集对数据进行分组

集旨在对数据的子集进行比拟。组旨在将相干成员合并在一个字段中。不保举将集调节为组,举例通过以下示例进行调节:

IF [Americas Set] THEN "Americas"ELSEIF [Africa Set] THEN "Africa"ELSEIF [Asia Set] THEN "Asia"ELSEIF [Europe Set] THEN "Europe"ELSEIF [Oceania Set] THEN "Oceania"ELSE "Unknown"END

之是以不保举这么作念,有以下几个原因:

集并不耐久是排他的。某些成员可能会出当前多个斟酌。举例,“俄罗斯”既可能放在“欧洲”斟酌,也可能放在“亚洲”斟酌。

集并不会耐久调节为组。要是集是通过抹杀、条目或戒指界说的,则可能很难以致无法创建等效的组。

处置有筹划

使用“组”功能对数据进行分组。关系详备信息,请参见对数据进行分组。

另请参见

创建高效的估量打算

优化职责簿性能

Tableau 中的估量打算类型

Tableau 中的函数twitter 白丝