本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用以下一项或多项创建计算字段以转换数据:
您可以在数据准备期间或从分析页面中向数据集添加计算字段。如果在数据准备期间将计算字段添加到数据集中,则可以在使用该数据集的所有分析中使用该字段。在将一个计算字段添加到分析中的数据集时,只能在此分析中使用该字段。
分析同时支持单行操作和聚合操作。单行操作是指为每行提供 (可能) 不同的结果的操作。聚合操作提供的结果始终与整个行集相同。例如,如果您使用不带任何条件的简单字符串函数,它将更改每一行。如果您使用聚合函数,该规则将应用于组中的所有行。如果要查询美国的总销售额,则相同的数量应用于整个集合。如果需要特定状态的数据,则总销售额会反映新分组。它仍将为整个集合提供一个结果。
通过在分析内创建聚合的计算字段,您可以深入了解数据。在每个级别相应地重新计算聚合字段的值。数据集准备期间不能有这种类型的聚合。
例如,假设您要计算每个国家/地区、区域和州/省的利润百分比。您可以在分析中添加计算字段,(sum(salesAmount - cost)) / sum(salesAmount)
。随后,在分析师深入到地理位置时,将计算每个国家/地区、区域和州/省的该字段。
将计算字段添加到分析
当您将数据集添加到分析中时,数据集中存在的每个计算字段都会添加到分析中。您可以在分析级别添加其他计算字段,以创建仅在该分析中可用的计算字段。
将计算字段添加到分析
-
打开 QuickSight 管理控制台
。 -
打开要更改的分析。
-
在数据窗格中,选择左上角的添加,然后选择 + 计算字段。
-
在打开的计算编辑器中,执行以下操作:
-
为计算字段输入名称。
-
使用数据集、函数和运算符中的字段输入公式。
-
-
完成后,选择保存。
有关如何使用中的可用函数创建公式的更多信息 QuickSight,请参阅Amazon 的计算字段函数和运算符参考 QuickSight 。
将计算字段添加到数据集
Amazon QuickSight 作者可以在数据集创建的数据准备阶段生成计算字段。当您为数据集创建计算字段时,该字段将成为数据集中的新列。所有使用该数据集的分析都会继承该数据集的计算字段。
如果计算字段在行级别运行,并且数据集存储在 SPICE, QuickSight 计算并实现结果 SPICE。 如果计算字段依赖于聚合函数,则 QuickSight 保留该公式并在生成分析时执行计算。此类计算字段称为非具体化计算字段。
为数据集添加或编辑计算字段
-
打开您希望使用的数据集。有关更多信息,请参阅 编辑数据集。
-
在“数据准备”页面上,执行以下操作:
-
要创建新字段,请选择左侧的添加计算字段。
-
要编辑现有的计算字段,请从左侧的计算字段中选择该字段,然后从上下文(右键单击)菜单中选择编辑。
-
-
在计算编辑器中,为添加标题输入描述性名称来命名新的计算字段。此名称出现在数据集的字段列表中,因此应与其他字段相似。在本示例中,我们将字段命名为
Total Sales This Year
。 -
(可选)添加注释,例如用斜杠和星号将文本括起来,以说明表达式的作用。
/* Calculates sales per year for this year*/
-
确定要使用的指标、函数和其他项目。在本示例中,我们需要确定以下内容:
-
要使用的指标
-
函数:
ifelse
和datediff
我们想构建一个语句,类似于“如果销售发生在今年,则显示总销售额,否则显示 0。”
要添加
ifelse
函数,请打开函数列表。选择全部以关闭所有函数的列表。现在,您应该会看到函数组:聚合、条件、日期等。选择条件,然后双击
ifelse
将其添加到工作区。ifelse()
-
-
将光标放在工作区的括号内,然后添加三个空白行。
ifelse( )
-
将光标放在第一个空白行上,找到
dateDiff
函数。它列在日期下的函数中。您也可以通过输入date
使用搜索功能查找。dateDiff
函数返回名称中包含
的所有函数。它不会返回日期下列出的所有函数;例如,搜索结果中缺少date
now
函数。双击
dateDiff
将其添加到ifelse
语句的第一个空白行。ifelse( dateDiff() )
添加
dateDiff
使用的参数。将光标放在dateDiff
括号内以开始添加date1
、date2
和period
:-
对于
date1
:第一个参数是包含日期的字段。在字段下找到它,然后双击它或输入其名称将其添加到工作区。 -
对于
date2
,添加逗号,然后选择truncDate()
作为函数。在括号内添加周期和日期,如下所示:truncDate( "YYYY", now() )
-
对于
period
:在date2
后面添加逗号并输入YYYY
。这是一年的周期。要查看所有支持的周期列表,在函数列表中找到dateDiff
,然后选择了解更多以打开文档。如果您已经像现在一样查看文档,请参阅 dateDiff。
如果您愿意,可以添加一些空格以提高可读性。表达式应如下所示。
ifelse( dateDiff( {Date}, truncDate( "YYYY", now() ) ,"YYYY" ) )
-
-
指定返回值。在我们的示例中,
ifelse
中的第一个参数需要返回TRUE
或FALSE
的值。因为我们想要当前年份,并且将其与今年进行比较,所以指定dateDiff
语句应返回0
。对于销售年份和当前年份之间没有区别的行,ifelse
的if
部分评估为 true。dateDiff( {Date}, truncDate( "YYYY", now() ) ,"YYYY" ) =
0
要为去年
TotalSales
创建字段,可以将0
更改为1
。使用
addDateTime
而不是truncDate
,也能达到同样的目的。然后,对于之前的每一年,更改addDateTime
的第一个参数来代表每一年。为此,您可以使用-1
表示去年,-2
表示之前的一年,依此类推。如果您使用addDateTime
,则将每年的dateDiff
函数保留为= 0
。dateDiff( {Discharge Date},
addDateTime(-1, "YYYY", now() )
,"YYYY" ) = 0 /* Last year */ -
将光标移到
dateDiff
下方的第一个空白行。添加逗号。对于
ifelse
语句的then
部分,我们需要选择包含销售额的度量(指标)TotalSales
。要选择字段,打开字段列表,然后双击字段将其添加到屏幕上。或者可以输入名称。在包含空格的名称周围添加大括号
{ }
。您的指标可能有不同的名称。您可以通过字段前面的数字符号(#)判断哪个字段是指标。现在,表达式应如下所示。
ifelse( dateDiff( {Date}, truncDate( "YYYY", now() ) ,"YYYY" ) = 0 ,{TotalSales} )
-
添加
else
子句。ifelse
函数不需要子句,但我们想添加。出于报告的目的,您通常不希望有任何 null 值,因为有时会省略带 null 值的行。我们将 ifelse 的其余部分设置为
0
。结果是,对于包含往年销售额的行,该字段为0
。为此,请在空白行上添加一个逗号,然后添加
0
。如果您在开头添加了注释,则最终ifelse
表达式应如下所示。/* Calculates sales per year for this year*/ ifelse( dateDiff( {Date}, truncDate( "YYYY", now() ) ,"YYYY" ) = 0 ,{TotalSales} ,0 )
-
选择右上角的保存以保存您所做的工作。
如果表达式中有错误,编辑器会在底部显示错误消息。检查表达式中是否有红色的波浪线,然后将光标悬停在该行上以查看错误消息内容。常见错误包括标点符号缺失、参数缺失、拼写错误和数据类型无效。
要避免进行任何更改,请选择取消。
将参数值添加到计算字段
-
您可以在计算字段中引用参数。通过将参数添加到表达式中,可以添加该参数的当前值。
-
要添加参数,打开参数列表,然后选择要包含其值的参数。
-
(可选)要手动向将参数添加到表达式,请键入参数的名称。然后用大括号
{}
将其括起来,并加上$
前缀,例如${parameterName}
。
您可以更改数据集中任何字段的数据类型,包括计算字段的类型。您只能选择与字段中的数据相匹配的数据类型。
更改计算字段的数据类型
-
对于计算字段(左侧),选择要更改的字段,然后从上下文(右键单击)菜单中选择更改数据类型。
与数据集中的其他字段不同,计算字段无法禁用。相反,可以将其删除。
删除计算字段
-
对于计算字段(左侧),选择要更改的字段,然后从上下文(右键单击)菜单中选择删除。
处理计算字段中的十进制值
当您的数据集使用直接查询模式时,十进制数据类型的计算由数据集来源引擎的行为决定。在某些特定情况下,会 QuickSight 应用特殊处理来确定输出计算的数据类型。
您的数据集何时使用 SPICE 查询模式并实现计算字段,结果的数据类型取决于特定的函数运算符和输入的数据类型。下表显示了一些数值计算字段的预期行为。
一元运算符
下表显示了根据您使用的运算符和输入值的数据类型输出哪种数据类型。例如,如果您在 abs
计算中输入一个整数,则输出值的数据类型为整数。
运算符 | 输入类型 | 输出类型 |
---|---|---|
abs |
十进制定点 | 十进制定点 |
Int | Int | |
十进制浮点 | 十进制浮点 | |
ceil |
十进制定点 | Int |
Int | Int | |
十进制浮点 | Int | |
exp |
十进制定点 | 十进制浮点 |
Int | 十进制浮点 | |
十进制浮点 | 十进制浮点 | |
floor |
十进制定点 | Int |
Int | Int | |
十进制浮点 | Int | |
ln |
十进制定点 | 十进制浮点 |
Int | 十进制浮点 | |
十进制浮点 | 十进制浮点 | |
log |
十进制定点 | 十进制浮点 |
Int | 十进制浮点 | |
十进制浮点 | 十进制浮点 | |
round |
十进制定点 | 十进制定点 |
Int | 十进制定点 | |
十进制浮点 | 十进制定点 | |
sqrt |
十进制定点 | 十进制浮点 |
Int | 十进制浮点 | |
十进制浮点 | 十进制浮点 |
二元运算符
下表根据您输入的两个值的数据类型显示输出哪种数据类型。例如,对于算术运算符,如果您提供两个整数数据类型,则计算结果将输出为整数。
对于基本运算符(+、-、*):
整数 | 十进制定点 | 十进制浮点 | |
---|---|---|---|
整数 |
整数 |
十进制定点 |
十进制浮点 |
十进制定点 |
十进制定点 |
十进制定点 |
十进制浮点 |
十进制浮点 |
十进制浮点 |
十进制浮点 |
十进制浮点 |
对于除法运算符(/):
整数 | 十进制定点 | 十进制浮点 | |
---|---|---|---|
整数 |
十进制浮点 |
十进制浮点 |
十进制浮点 |
十进制定点 |
十进制浮点 |
十进制定点 |
十进制浮点 |
十进制浮点 |
十进制浮点 |
十进制浮点 |
十进制浮点 |
对于指数运算符和模数运算符(^、%):
整数 | 十进制定点 | 十进制浮点 | |
---|---|---|---|
整数 |
十进制浮点 |
十进制浮点 |
十进制浮点 |
十进制定点 |
十进制浮点 |
十进制浮点 |
十进制浮点 |
十进制浮点 |
十进制浮点 |
十进制浮点 |
十进制浮点 |