sql-server - 当某些行不存在时如何计算平均值?

标签 sql-server ssas mdx olap

请帮助创建一些值是 NULL 时的平均值

事实表:

enter image description here

立方体:

SELECT NON EMPTY {[Measures].[Score]} * [Date].[Month].allmembers ON COLUMNS
,{[Name].[name].allmembers} ON ROWS
FROM Test

enter image description here

问题:

当我计算平均值时,NULL 值被排除在外。我尝试了 COALESCEEMPTY(),但无论如何都无法正确计算平均值。 Score=0 不正确的月份的平均值。继承人的代码:

WITH
MEMBER [Measures].[DateCount] AS DISTINCTCOUNT([Data].[date].[date])
MEMBER [Measures].[ScoreX] AS COALESCEEMPTY([Measures].[Score],0)
MEMBER [Measures].[DateCountX] AS COALESCEEMPTY([Measures].[DateCount],0)
MEMBER [Measures].[AvgScore] AS IIF([Measures].[DateCountX]=0,0,[Measures].[ScoreX]/[Measures].[DateCountX])
 SELECT NON EMPTY {[Measures].[AvgScore]} * [Date].[Month].allmembers ON COLUMNS
 ,{[Name].[name].allmembers} ON ROWS
 FROM Test

enter image description here

请帮忙寻找解决方案。

最佳答案

可能像下面这样:

WITH 
MEMBER [Measures].[Score X] AS
  IIF(
    [Measures].[Data Count]=0
    ,0
    ,[Measures].[Data Count]
  )
MEMBER [Measures].[Data Count X] AS
  COUNT(
    [name].[name].CURRENTMEMBER
    *[Measures].[Score X]
  )
MEMBER [Measures].[Avg Score] AS
  DIVIDE(
    [Measures].[Score]
   ,[Measures].[Data Count X]
  )
...
...

如 Tab 所述,您可以对上面的第一个计算成员使用函数 COALESCEEMPTY:

WITH 
MEMBER [Measures].[Score X] AS
  COALESCEEMPTY(
    [Measures].[Data Count]
    ,0)
MEMBER [Measures].[Data Count X] AS
  COUNT(
    [name].[name].CURRENTMEMBER
    *[Measures].[Score X]
  )
MEMBER [Measures].[Avg Score] AS
  DIVIDE(
    [Measures].[Score]
   ,[Measures].[Data Count X]
  )
...
...

关于sql-server - 当某些行不存在时如何计算平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33240187/

相关文章:

sql-server - 使用单例类创建数据库上下文是一种好习惯吗?

sql-server - "Restoring"一个mdf数据库文件到一个新的数据库

sql - 如何获取范围内一年中特定月份的天数总和

ssas - MDX:组合不同标准的输出

ssas - DAX SUMX : Storing a filtered table in a VAR and reference its columns later on in the expression

mdx - javascript 为 mdx 进行美化

sql-server - SQL Server 错误 - HRESULT E_FAIL 已从对 COM 组件的调用返回

filter - 无法让过滤器在多个条件下工作

sql-server - [All] 既是级别又是成员(member)

sql-server-2008-r2 - 更新数据库后如何将更改传播到分析服务