我有一个表格模型,主要是星型模式,除了日期,它与事实表没有关系。
原因是所有运行的报告都是快照报告,即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())会导致此问题。
答案 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]