首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GROUP BY CUBE()的DAX等效项

问GROUP BY CUBE()的DAX等效项
EN

Stack Overflow用户
提问于 2016-10-05 04:10:38
回答 1查看 147关注 0票数 0

我正在使用汇总(...ROLLUP...)在DAX中,它与T-SQL中的ROLLUP()实现了与GROUP相同的功能,到目前为止还不错。

是否有与GROUP BY CUBE()相同的DAX语句?我还想得到rollup的所有其他排列。

这里有一个模拟的例子,希望它能有意义

代码语言:javascript
复制
 EVALUATE SUMMARIZE(Invoices , ROLLUP( [Customer], [Product], [Year]) ,
 "Orders", DISTINCTCOUNT(Invoices[Order ID]) )

将返回这些段

代码语言:javascript
复制
Customer Product        Year
NULL     NULL           NULL
Smith    NULL           NULL
Smith    Bikes          NULL
Smith    Bikes          2015
Smith    Bikes          2016
Smith    Treadmills     NULL
Smith    Treadmills     2015
Smith    Treadmills     2016

但我想看到的是

代码语言:javascript
复制
Customer Product        Year
NULL     NULL           NULL
Smith    NULL           NULL
NULL     Bikes          NULL
Smith    Bikes          NULL
NULL     Bikes          2015
NULL     Bikes          2016
NULL     Treadmills     2015
NULL     Treadmills     2016
NULL     NULL           2015
NULL     NULL           2016
Smith    Bikes          2015
Smith    Bikes          2016
NULL     Treadmills     NULL
Smith    Treadmills     NULL
Smith    Treadmills     2015
Smith    Treadmills     2016

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-10-07 06:04:37

您可以使用ROLLUP多次生成三个不同的表,以模拟多维数据集的粒度。

ROLLUP ( [Customer], [Product], [Year] )

ROLLUP ( [Product], [Year], [Customer] )

ROLLUP ( [Year], [Customer], [Product] )

虽然这会生成三个表,但有必要对它们进行UNION并从最终的表中删除重复项,因为它会重复一些汇总和小计行,因此您必须使用DISTINCT函数。

最终的DAX表达式应如下所示:

代码语言:javascript
复制
EVALUATE
DISTINCT (
    UNION (
        SELECTCOLUMNS (
            SUMMARIZE (
                Invoices,
                ROLLUP ( [Customer], [Product], [Year] ),
                "Orders", DISTINCTCOUNT ( Invoices[Order ID] )
            ),
            "Customer", [Customer],
            "Product", [Product],
            "Year", [Year],
            "Orders", [Orders]
        ),
        SELECTCOLUMNS (
            SUMMARIZE (
                Invoices,
                ROLLUP ( [Product], [Year], [Customer] ),
                "Orders", DISTINCTCOUNT ( Invoices[Order ID] )
            ),
            "Customer", [Customer],
            "Product", [Product],
            "Year", [Year],
            "Orders", [Orders]
        ),
        SELECTCOLUMNS (
            SUMMARIZE (
                Invoices,
                ROLLUP ( [Year], [Customer], [Product] ),
                "Orders", DISTINCTCOUNT ( Invoices[Order ID] )
            ),
            "Customer", [Customer],
            "Product", [Product],
            "Year", [Year],
            "Orders", [Orders]
        )
    )
)

最终结果应该是这样的:

代码语言:javascript
复制
Customer    Product     Year    Orders
 Smith       Bikes      2015      2
 Smith       Bikes      2016      2
 Smith     Treadmills    2016     1
 Smith       Bikes                4
 Smith     Treadmills             1
 Smith                            5
                                  5
             Bikes      2015      2
             Bikes      2016      2
           Treadmills    2016     1
             Bikes                4
           Treadmills             1
 Smith                  2015      2
 Smith                  2016      3
                        2015      2
                        2016      3

如果这有帮助,请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39860944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档