如何在SSAS上的数据透视表计数中包含NULL?

时间:2016-12-16 13:36:55

标签: sql-server sql-server-2012 ssas ssas-2012

我有一个视图,它将订单连接到用作事实表的网络跟踪数据。我有很多空值,因为订单获取网络跟踪信息需要一段时间。正如您所看到的,我的总行数为86432.但是我的度量计数显示为52,753(构建度量值组时的简单行数)。 (使用完全相同的视图)。 enter image description here

enter image description here

我相信由于数据中的空值,我的计数会出错。如何让SSAS正确计算我的空值? (我只能对源数据库做些什么,因为我无权更改源系统的核心结构。)

enter image description here

enter image description here

我理解你所说的关于计算字段与所有字段的内容然而,正如您在SSAS中创建新度量所看到的那样,您可以选择计算源表的行数。这是我期望的行为,我希望在桌面上与SELECT *相同,如我的图片所示...

2 个答案:

答案 0 :(得分:1)

我认为DimAd没有null或零AdKey行。我相信在处理过程中你必须改变错误配置,让它丢弃或忽略外键为空的任何事实表行。

我的最高建议是将您的事实表外键更改为非null。您需要在每个维度中创建一个-1键,然后在事实表中使用它,而不是如here所述的null。

如果这不可行,则将null或零AdKey行添加到事实表外键可以为null的任何维度。 SSAS应该将公牛队转换为零,所以要么应该工作。然后在处理过程中,这些行不会被删除,因为它们可以正常连接。并且您不必在处理期间更改错误配置。

如果这不可行或不可接受,那么您可以打开可以为空的所有维度上的未知成员。然后在“维度用法”选项卡中将每个关系设置为回退到“未知”成员。该过程描述为here

答案 1 :(得分:-1)

为了获得真正的行计数,您不需要计算列,而是使用*。

无论COUNT(*)

NULL都会计算所有行数

COUNT(Column)仅计算NON-NULL个值

测试示例

declare @table table (i int)
insert into @table (i) values
(1),(NULL),(NULL),(NULL)

select count(*) from @table --returns 4
select count(i) from @table --returns 1