2017-03-13 74 views
0

我有一个表格模型,主要是星型模式,除了日期,其中没有对事实表的关系。优化dax独特聚合

其原因是所有报告运行都是快照报告,即其中选择日期在StartDate & EndDate之间,即没有直接关系。

在计算所有ID的不同计数时这很好,但是如果用户将一列拖到数据透视表的行上,为了突出结果,excel在给出“内存错误:分配之前冻结一段时间失败:分页文件太小....“。

为了优化,我在我的事实表上创建了许多计算列,其中一个用于度量中的每个过滤器,因此计算不必查询关系&维度。除日期栏外,我可以为此执行此操作。

数据库不大,大概700MB,合计的不同计数是4000行左右,所以结果集也不大,但我仍然得到了内存不足的例外。

计算如下。我不能分享的完整数据集遗憾的是:

CALCULATE (
countrows (values('StudentResults' [StuIDNumber]) ), 
FILTER (
'StudentResults', 
( 
'StudentResults'[CourseInstanceStartDate] <= MIN ('Date'[DateID]) 
&& 'StudentResults'[CourseInstanceEndDate] >= MIN ('Date'[DateID]) 
) 
&& 'StudentResults'[CourseInstanceStatusCode] = "OPEN" 
&& 'StudentResults'[StudentStartDateID] <> 19500101 
&& 'StudentResults'[studentStatusCode] = "R" 
&& 'StudentResults'[Session] >= 2014 
) 
) 

标识appreaciate如何得到这个工作的任何想法? (注意它与COUNTA(),或计数,但distinctCount或countrows(值())导致此问题。

回答

0

我所面临使用COUNTROWS在虚拟表类似的问题,最终通过SUMX

CALCULATE (
    SUMX (DISTINCT (StudentResults[StuIDNumber]), 1), 
    FILTER (
     StudentResults, 
     (
      [CourseInstanceStartDate] <= MIN ('Date'[DateID]) 
       && [CourseInstanceEndDate] >= MIN ('Date'[DateID]) 
     ) 
      && [CourseInstanceStatusCode] = "OPEN" 
      && [StudentStartDateID] <> 19500101 
      && [studentStatusCode] = "R" 
      && [Session] >= 2016 
    ) 
) 

我见过一对夫妇的问题,关于这个问题之前的OP表示它提高了性能也希望它为你工作[1]

+0

我想,和我有一样的。“内存错误:分配失败”错误,尽管它可能比distinctCount更高效,但对于这种特殊情况还不够 我设法通过将STUIDNumber从一个字符串转换为整数来获得DistinctCount的工作。空间需求似乎少得多,但查询仍需要大约2分钟的时间才能运行,这是不可接受的。 我回到了古老的方式,使用Summarize。它比计算更复杂,我担心我没有考虑所有的结果,但我已经做了相当多的测试,看起来没问题。 –