我正在使用AdventureWorks2016数据库,并创建了一个简单表来显示所有产品及其总销售额。销售金额正确。
销售金额值来自名为[Internet销售总和]的度量。看起来像这样:
Sum of Internet Sales =
SUM('Internet Sales'[Sales Amount])
“产品”与“互联网销售”之间存在1:M的关系。
在DAX Studio中,我创建了以下查询以获取最高价值:
SELECTCOLUMNS(
TOPN(
1,
'Product',
[Sum of Internet Sales],
DESC
),
"Product Name",
'Product'[Product Name]
)
查询返回Road-150 Red, 48
。这显然是不正确的。
更奇怪的是,如果我更改TOPN以返回前2个值而不是1,我会得到:
Road-150 Red, 62
Road-150 Red, 48
最后,如果我将其更改为返回前十名,我会得到:
Mountain-200 Silver, 46
Mountain-200 Silver, 38
Mountain-200 Black, 38
Road-150 Red, 44
Road-150 Red, 62
Mountain-200 Black, 46
Mountain-200 Black, 42
Road-150 Red, 52
Road-150 Red, 56
Road-150 Red, 48
在我遇到这个问题之前,我以为我了解TOPN。或者,也许我的简单措施不正确?
答案 0 :(得分:4)
实际上只是抓住了AdventureWorks,@ StelioK在第一条评论中就出现了。
AdventureWorks中的“产品”是一个变化缓慢的维度。某些共享相同名称的产品有多个不同的行。由于您引用的是TOPN
中的整个表格,因此[Internet销售总和]的值是特定产品版本的总和。 “ Mountain-200 Black,46”的销售分为多个“产品” [ProductKey]:
EVALUATE
SUMMARIZECOLUMNS(
'Product'[ProductKey],
'Product'[EnglishProductName],
TREATAS ( {"Mountain-200 Black, 46"}, 'Product'[EnglishProductName] ),
"Sales", [Sum of Internet Sales]
)
/* results in:
| ProductKey | EnglishProductName | Sales |
|------------+------------------------+-------------|
| 362 | Mountain-200 Black, 46 | 411868.7382 |
| 363 | Mountain-200 Black, 46 | 961600.81 |
*/
顶级产品(不是顶部的“产品” [Product Name],而是“产品”中与最高销售额相关的行)的销售额显示如下:
EVALUATE
SUMMARIZECOLUMNS(
'Product'[ProductKey],
'Product'[EnglishProductName],
TREATAS ( {"Road-150 Red, 48"}, 'Product'[EnglishProductName] ),
"Sales", [Sum of Internet Sales]
)
/* results in:
| ProductKey | EnglishProductName | Sales |
|------------+--------------------+------------|
| 312 | Road-150 Red, 48 | 1205876.99 |
*/
如您所见,“产品”中[ProductKey] = 312的行的销售额实际上高于[ProductKey] = 362或[ProductKey] = 363的销售额。