TOPN-结果不一致

时间:2019-09-11 13:47:44

标签: dax

我正在使用AdventureWorks2016数据库,并创建了一个简单表来显示所有产品及其总销售额。销售金额正确。

enter image description here

销售金额值来自名为[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。或者,也许我的简单措施不正确?

1 个答案:

答案 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的销售额。