DAX表格模型中的自我过滤表非常慢

问题描述:

我有一个包含订单位置和相应订单号的事实表。它有大约250万行。DAX表格模型中的自我过滤表非常慢

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

我添加了一个表,其中包含所有不同的商品编号,这些商品编号仅包含一列OrderFilter [ArticleNr]。该表格应用于过滤订单表。该表与订单表无关。

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

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中使用它时,将层次结构放入行中会超时。

有没有可能调整这个查询?

问候, 亨宁兰格

更新:期望中的结果表格(真不知道怎么在这里添加表...)

Orders表。如果我筛选ArticleNr = 2,我想保留“< - 保留” - 箭头。

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

你为什么不创建两个表之间的关系?它会比** FILTER **中使用** CONTAINS **功能更高效。显式关系总是比过滤器更快。 –

+0

你好,谢谢你的快速回复。我认为这种关系不会帮助我解决这个问题。如果我在这些表格之间创建关系,我会将订单[ArticleNr]与Orderfilter [ArticleNr]关联起来。这样我就会根据ArticleNr过滤订单表。但那不是我想要达到的。我想根据OrderNr过滤Orders表。 “包含物品x,y或z的所有订单的销售额是多少?”通过你的建议,我可以回答“x,y或z这些文章的销售额是多少”这个问题。或者我在这个假设中错了吗? –

+0

我会在源头处理它,即在Orders和Orderfilter表中创建一个公共列。编辑您的问题以包含样本数据和预期结果。 –

,如果你选择一个ArticleNr这种方法才有效。由于我使用MAX()函数来确定过滤器中选定的值是什么,它将始终返回选定的最大值ArticleNr

考虑这个样本数据:

订单表

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] 
) 

这是电力透视透视表。

enter image description here

让我知道,如果这有助于。

+0

嗨,这个作品很棒!我很惊讶你为这个问题付出了多少努力。最后,我对有机会仅过滤一篇ArticleNr并不满意。我发现了另一个可与多个ArticleNrs一起工作的解决方案:http://blog.gbrueckl.at/2012/05/resolving-many-to-many-relationships-leveraging-dax-cross-table-filtering/ –

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

尝试构建自然层次结构,然后检查它。 以日期变暗为例。 你有日期,月份,年份。如果您只是将1月 - 12月放入月份列,则不会是唯一的。尝试明确指定hierarhy成员。就像在这种情况下,也把年份放入月份列中,例如2016年1月份等。因此,每个月都是独一无二的,并且当您执行深入分析时,引擎不会采用哪个成员。