2010-01-12 72 views

回答

1

我可以看到两个可能的选择。创建一个.Net存储过程是一个,但是在调用这些过程时会有一些开销,所以你不想在一个单元上运行一个Mode函数。

另一种选择是,如果没有太多的需要跨操作的不同值,则是创建一个具有基于数字的属性的维度。然后,您可以创建一个行计数度量,并通过使用数值在维度上执行TOPCOUNT(...,1)来获取模式。

-1

这应做到:

create table #temp (value int) 
insert into #temp (value) values (1) 
insert into #temp (value) values (1) 
insert into #temp (value) values (1) 
insert into #temp (value) values (2) 
insert into #temp (value) values (2) 
insert into #temp (value) values (3) 
insert into #temp (value) values (3) 
insert into #temp (value) values (3) 
insert into #temp (value) values (3) 
insert into #temp (value) values (3) 
insert into #temp (value) values (3) 
insert into #temp (value) values (4) 


select value from (select top 1 count(*) as counts, value from #temp group by value order by count(*) desc) as myTemp 
+0

这被标记为MDX问题,而不是SQL问题。在SQL Server分析服务中不使用TSQL,所以这不能解决我的问题。模式很容易在Sql Server或者SSIS中计算,但我需要在SSAS中根据我的需要来完成。 – 2010-01-14 18:17:54

0

如何创建您对模式感兴趣的数字的事实维度(Degenerate dimension),然后使用该维度对行数进行计数,计算1的最大计数?

或者您是否可以使用可用于可能场景的更一般的MDX计算?

+0

我是经过了一个更一般的计算。我想出了这个,但它太慢了,无法使用。事实证明,在我的特定情况下,MODE的值超过了MEDIAN的50%,所以我继续使用MEDIAN,因为它是内置的。 MEDIAN([Billable Item]。[Billable Item ] [All] .Children, [Measures]。[Contractual Adjustment - Billable Item]) 到目前为止,我一直无法让生产使用速度够快,但对于非常小的数据集却只需要几分钟。我想我需要使用EXISTS或其他类型的过滤器来加速它。 – 2010-05-04 18:20:59

+0

@Shane - 如果这是一个计算成员,设置非空行为是值得的:http://msdn.microsoft.com/en-us/library/ms166568.aspx它应该使它更快,如果它没有设置,但要小心,因为设置错误会产生错误的结果。 – Meff 2010-05-04 20:06:05

相关问题