在表格模型中使用 DAX 进行自过滤 Table 非常慢

Self Filtering Table with DAX in Tabular Model very slow

我有一个 Fact-Table 包含订单头寸和相应的订单号。它有大约 250 mio 行。

我的目标是创建一个可用于回答以下问题的度量:包含产品 xyz 的所有订单的总收入是多少。

我添加了一个 table,其中包含所有不同的文章编号,称为 Orderfilter,只有一列 OrderFilter[ArticleNr]。此 table 将用于过滤订单 table。此 table 与订单 table 无关。

基于此设置,我创建了以下度量。

Orderfilter Sum sales:=SUMX(
CALCULATETABLE (
    Orders;
    FILTER (
        Orders;
        CONTAINS (
            CALCULATETABLE (
                VALUES(Orders[OrderNr]);
                FILTER (
                    Orders;
                    CONTAINS (
                        VALUES ( Orderfilter[ArticleNr] );   
                        Orderfilter[ArticleNr];
                        Orders[ArticleNr]
                    )
                )
            ); 
            Orders[OrderNr];
            Orders[OrderNr]
        )
    )
);
Orders[Salesamount]
)

这个计算本身似乎有效,但速度很慢。当我尝试在 Excel 中使用它时,将层次结构放入行中,它会超时。

是否可以调整此查询?

此致, 亨宁兰格

更新:期望的结果Tables(真的不知道如何在这里添加tables...)

订单table。如果我过滤 ArticleNr=2 我想保留“<- Keep”-rows.

|OrderNr     |ArticleNr  |    
|1           |1          |   <- Keep    
|1           |***2***    |   <- Keep    
|2           |1          |    
|2           |3          |    
|3           |***2***    |   <- Keep

此方法只有在您 select 一个 ArticleNr 时才有效。由于我使用 MAX() 函数来确定过滤器中的 selected 值是什么,因此它将 return 最大值 selected ArticleNr 始终。

考虑这个示例数据:

订单Table

OrderNr  ArticleNr  Revenue
   1         1        100
   1         2        200
   2         1         50
   2         3         70
   3         2        300
   3         4        200
   4         1         50

文章

ArticleNr
   1
   2
   3

创建一个度量来确定行:

Rows :=
SUMX ( FILTER ( Orders, [ArticleNr] = MAX ( Articles[ArticleNr] ) ), 1 )

现在使用 Rows 度量,您可以获得 Sum Sales:

Sum Sales :=
SUMX (
    FILTER ( Orders, SUMX ( ALLEXCEPT ( Orders, Orders[OrderNr] ), [Rows] ) = 1 ),
    [Revenue]
)

这是 Power Pivot 中的一个 Pivot Table。

如果有帮助请告诉我。

如果只是在 Excel 中使用层次结构时速度较慢,那么层次结构就是问题所在。这可能是不自然的。 Excel 无论使用什么引擎,都将 MDX 查询向下发送到 SSAS(tabular/multidim)。当涉及到不自然的层次结构时,事情就会出错。

尝试建立自然的层次结构,然后检查它。 以 Date dim 为例。 你有日期、月份、年份。如果您只是将 January - December 放入 Month 列,它不会是唯一的。尝试明确指定层次结构成员。就像在这种情况下,也将年份放入月份列中,例如 2016 年 1 月等。因此每个月都是唯一的,当您执行 drill-downs.

时,引擎将不会选择哪个成员