在表格模型中使用 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.
时,引擎将不会选择哪个成员
我有一个 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.
时,引擎将不会选择哪个成员