优化dax不同的聚合

时间:2017-03-13 17:05:11

标签: powerbi powerpivot dax ssas-tabular

我有一个表格模型,主要是星型模式,除了日期,它与事实表没有关系。

原因是所有运行的报告都是快照报告,即StartDate和amp;之间的selectedDate。 EndDate,即没有直接关系。

在计算所有ID的明确计数时这很好,但是如果用户将列拖到数据透视表的行上,为了打破结果,excel会冻结一段时间然后再给出&# 34;内存错误:分配失败:页面文件太小了...."

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

数据库不大,大约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
)
)

我对如何使这项工作有任何想法? (注意它适用于CountA()或Count,但distinctCount或countrows(values())会导致此问题。

1 个答案:

答案 0 :(得分: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]