以任何方式知道聚合公式中的group by子句

时间:2017-08-30 17:44:06

标签: sql-server tsql

在内部商业智能系统中,我必须提供一些KPI 我努力提供一个 这个根据聚合级别计算的方式不同

  

例如:我有一个层次结构

     
    

1级/ 2级别/ 3级

  

所有成员都有一些自定义权重,我必须计算加权平均值,所以如果我按照

进行分组的话
  

level1,level2是

     
    

sum(value * level3weight)/ sum(level3weight)

  

如果我按级别1进行分组,我必须先在级别2进行先前的计算,然后使用该结果

  

总和(我之前计算的结果,level2weight)/ sum(level2weight)

如果我可以使用sql子查询进行一些自定义查询,那么所有这些都很容易做到, 问题在于内部" BI系统"生成简单的SQL,我必须提供视图。 这个sql生成器只能生成min/max/sum/avg 我试图找到一种在聚合中写入的方法:"如果我在group by子句中有level2,那么我将做这个公式,否则,我将做另一个公式"。

我尝试使用grouping()但是如果我测试level2而级别2不在group by list中,则查询会崩溃。

如果我有SSAS,我将使用MDX SCOPE运算符,我不知道SQL中是否存在与MDX SCOPE等效的内容。 我也不能使用CLR自定义聚合。

我现在看到的唯一解决方案是提供2个带2个指标的视图(1个用于1级,1个用于2级)但这不起作用,因为我有多个级别和多个层次结构需要管理。

如果有人有想法

由于

0 个答案:

没有答案