Only - 图表函数
Only() 用于返回一个值(如果从聚合数据得出一个且只有一个可能值)。例如,如果有多个产品的单价为 9,则只搜索单价为 9 的产品将会返回 NULL。
语法:
Only([{SetExpression}] [TOTAL [<fld {,fld}>]] expr)
返回数据类型: 双
| 参数 | 描述 |
|---|---|
| expr | 表达式或字段包含要度量的数据。 |
| SetExpression | 聚合函数会默认聚合选择项定义的可能记录集合。可选记录集合可由集合分析表达式定义。 |
| TOTAL | 如果在函数参数前面出现单词 TOTAL,则计算给出当前选择项的所有可能值,而不只是属于当前维度值的那些值,即它会忽略图表维度。 通过使用 TOTAL [<fld {.fld}>](其中 TOTAL 限定符后跟一个或多个字段名称作为图表维度变量的子集的列表),您可以创建总可能值的子集。 |
| 示例 | 结果 |
|---|---|
| Only(Category) | 只要它在上下文中是唯一的,就显示 Category。 |
示例 - Only 基本原理
概述
打开数据加载编辑器,并将下面的加载脚本添加到新部分。
加载脚本包含:
-
加载到名为 Example 的数据表中的数据集。
-
数据表中有以下字段:
-
Customer
-
Product
-
UnitSales
-
UnitPrice
-
加载脚本
Example:
LOAD * inline [
Customer|Product|UnitSales|UnitPrice
Astrida|AA|4|16
Astrida|AA|10|15
Astrida|BB|9|9
Betacab|BB|5|10
Betacab|CC|2|20
Betacab|DD||25
Canutility|AA|8|15
Canutility|CC||19
] (delimiter is '|');结果
加载数据并打开工作表。使用以下度量创建新表:
-
=Only({<UnitPrice={9}>} Product),计算唯一的 Product,其具有 UnitPrice 9。
-
=Only({<Product={DD}>} Customer),计算唯一的 Customer,其销售名为 DD 的 Product。
-
=Only({<UnitPrice={20}>} UnitSales) 用于计算 UnitSales 的数目,其中 UnitPrice is 20.
-
=Only({<UnitPrice={15}>} UnitSales),计算 UnitSales 的值,其中UnitPrice = 15 。
| Only({<UnitPrice={9}>} Product) | Only({<Product={DD}>} Customer) | Only({<UnitPrice={20}>} UnitSales) | Only({<UnitPrice={15}>} UnitSales) |
|---|---|---|---|
| BB | Betacab | 2 | - |
在此示例中,请注意以下几点:
-
第一列返回值 BB ,因为这是具有 UnitPrice 为 9 的唯一 Product。
-
第二列返回 Betacab,因为它是销售 Product 的唯一 Customer,该产品名为 DD。
-
第三列返回 2 ,因为这是 UnitSales 的唯一值,其中 UnitPrice = 20。
-
第四列返回NULL ,因为UnitPrice = 15. 在这个数据集中,有两个UnitSales 的值,其中 UnitPrice =15 。
示例 – 仅限场景
概述
数据集包含按期间划分的产品销售额。该公司希望确定一种产品是在一家商店销售还是在多家商店销售。
打开数据加载编辑器,并将下面的加载脚本添加到新部分。
加载脚本包含:
-
加载到名为 Example 的数据表中的数据集。
-
数据表中有以下字段:
-
Date
-
RecordID
-
StoreProduct
-
Sales
-
加载脚本
Example:
Load * inline [
Date, RecordID, StoreProduct, Sales, Store
2024-01-01, 1, Apple, 100, A
2024-01-15, 2, Banana, 80, B
2024-01-30, 3, Carrot, 50, C
2024-02-05, 4, Apple, 120, A
2024-02-20, 5, Banana, 90, B
2024-02-28, 6, Carrot, 60, D
2024-03-10, 7, Apple, 110, A
2024-03-22, 8, Banana, 85, B
2024-03-31, 9, Carrot, 55, C
];结果
加载数据并打开工作表。创建新表并将该字段添加为维度:
-
StoreProduct
创建以下度量:
-
=Only(Store),计算销售产品的唯一商店。
-
=If(IsNull(Only(Store)), 'Multiple Stores', 'Single Store'),计算产品是在单个商店销售还是在多个商店销售。
-
=Sum(Sales),计算产品总销售额。
| StoreProduct | Only(Store) | If(IsNull(Only(Store)), 'Multiple Stores', 'Single Store') | Sum(Sales) |
|---|---|---|---|
| Apple | A | Single Store | 330 |
| Banana | B | Single Store |
255 |
| Carrot | - | Multiple Stores | 165 |
结果表明,Apples 和 Bananas 仅在单个商店中销售,而 Carrots在多个商店中销售。
示例 - 创建单月记录表的进阶场景
概述
此示例使用 Only 函数逐行显示一个月的记录表。为了实现这一点,使用集合分析来确定所需记录集的范围。集合分析至少需要一个度量,尽管由于我们实际上不需要聚合记录集合,我们可以有效地使用 Only 聚合函数来承载集合分析范围。
打开数据加载编辑器,并将下面的加载脚本添加到新部分。
加载脚本包含:
-
加载到名为 Example 的数据表中的数据集。
-
前一个加载语句,通过使用 MonthStart 函数截断月份中的某一天,并返回每月 1 日的日期表示形式,从 Date 字段中衍生 MonthYear 字段。这一结果将提供给 Date 函数,以将显示格式设置为 MMM YY ,例如 Jan 24 。
-
数据表中有以下字段:
-
Date
-
RecordID
-
StoreProduct
-
Sales
-
Store
-
加载脚本
Example:
Load
*,
date(MonthStart (Date),'MMM YY') AS MonthYear
inline [
Date, RecordID, StoreProduct, Sales, Store
2024-01-01, 1, Apple, 100, A
2024-01-15, 2, Banana, 80, B
2024-01-30, 3, Carrot, 50, C
2024-02-05, 4, Apple, 120, A
2024-02-20, 5, Banana, 90, B
2024-02-28, 6, Carrot, 60, D
2024-03-10, 7, Apple, 110, A
2024-03-22, 8, Banana, 85, B
2024-03-31, 9, Carrot, 55, C
];结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
MonthYear
-
RecordID
-
Date
-
StoreProduct
-
Store
创建以下度量:
-
=Only({$<MonthYear={'$(=MaxString(MonthYear))'}>} Sales),对 Sales 值进行评估,并根据表格中的当前选择,只返回 MonthYear 为最新(最近)MonthYear 的值。美元符号 ($) 扩展使用 MaxString 函数 $(=MaxString(MonthYear)) 执行内联计算,该函数返回最新 MonthYear 值的文本表示。
| MonthYear | RecordID | Date | StoreProduct | Only({$<MonthYear={‘$(=MaxString(MonthYear))’}>} Sales) |
|---|---|---|---|---|
| Mar 24 | 7 | 2024-03-10 | Apple | 110 |
| Mar 24 | 8 | 2024-03-22 |
Banana |
85 |
| Mar 24 | 9 | 2024-03-31 | Carrot | 55 |
Only 函数的输出生成一个记录表,默认显示数据中可用的最新或最近 MonthYear 的销售值。如果从 MonthYear 列中选择较早的月份,例如 Feb 24,则将显示该月的最新销售值。