首页 文章

优化dax不同的聚合

提问于
浏览
0

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

这样做的原因是所有报告都是快照报告,即StartDate和EndDate之间的selectedDate,即没有直接关系 .

在计算所有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
)
)

我想知道如何让这个工作吗? (注意它适用于CountA()或Count,但distinctCount或countrows(values())会导致此问题 .

1 回答

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

相关问题