none
SCCM报表漏项的问题,求解 RRS feed

  • 问题

  • 经过几个月的测试我发现SCCM的报表漏项很常见,也许是我SQL太菜....

    集合中100台收集了完整数据的主机,在我自定义的报表中总是只有90台左右

    主要发现的问题如下

    比如:
    有3个30岁的人A,B,C
    A"工作"="教师"
    B"工作"=null
    C"工作"="警察"
    如果这么查询 "年纪"="年纪"则返回 "工作"  即

     inner join v_GS_X86_PC_MEMORY on (v_GS_X86_PC_MEMORY.ResourceID = v_R_System_Valid.ResourceID) 

    这种的

    这个查询结果中就不会出现B"工作" = null  的. 有无办法让null的不成漏项?

    还有物理内存换算成GB的时候也特别容易造成报表结果漏项.

    2010年11月18日 15:49

答案

  • lz 该补补SQL。

    null 不等于任何东西,null 甚至不等于null。  操作null值时,要用  is null 或者 is not null 来判断。

    内存换算成GB时是什么样的问题你没说。可能的原因就是几个:

    1。 KB 换算到MB,GB 要除1024   
    2。 集成显卡使用物理内存做显存造成的内存减少  ---  这种情况 对于SCCM来说无解,因为做显存这部分内存在OS启动前BIOS 加载时就已经被占用了, OS 只能看到剩下的物理内存,所以 SCCM client的 inventory 也只能看到剩下的物理内存。

    对很多集成显卡来说,具体占用多少物理内存做显存还会根据情况变化,所以没什么好办法。 顶多就是你对公司里机器硬件比较熟,知道都用那些显卡,对使用了物理内存做显存的机器,做SQL的时候通过条件判断把这部分物理内存再加回去。

    如果一定要 使用内存容量 > 2048MB  这样的判断条件,必然有一些机器会不满足。偷懒就根据情况改成 内存容量 > 1950MB 好了,反正内存都是2的整数倍增加,不会真的有1950MB的。  使用物理内存做显存,不会占用超过64MB的。

    2010年11月26日 2:46
    版主

全部回复

  • lz 该补补SQL。

    null 不等于任何东西,null 甚至不等于null。  操作null值时,要用  is null 或者 is not null 来判断。

    内存换算成GB时是什么样的问题你没说。可能的原因就是几个:

    1。 KB 换算到MB,GB 要除1024   
    2。 集成显卡使用物理内存做显存造成的内存减少  ---  这种情况 对于SCCM来说无解,因为做显存这部分内存在OS启动前BIOS 加载时就已经被占用了, OS 只能看到剩下的物理内存,所以 SCCM client的 inventory 也只能看到剩下的物理内存。

    对很多集成显卡来说,具体占用多少物理内存做显存还会根据情况变化,所以没什么好办法。 顶多就是你对公司里机器硬件比较熟,知道都用那些显卡,对使用了物理内存做显存的机器,做SQL的时候通过条件判断把这部分物理内存再加回去。

    如果一定要 使用内存容量 > 2048MB  这样的判断条件,必然有一些机器会不满足。偷懒就根据情况改成 内存容量 > 1950MB 好了,反正内存都是2的整数倍增加,不会真的有1950MB的。  使用物理内存做显存,不会占用超过64MB的。

    2010年11月26日 2:46
    版主
  • 另:如果通过join 连接来判断条件,当然也是使用值来判断,如果一个表中的值由null值,它必然会被过滤掉。

    inner join v_GS_X86_PC_MEMORY on (v_GS_X86_PC_MEMORY.ResourceID = v_R_System_Valid.ResourceID) 

    如果这种情况,还需要在report中保留这些null值,就不应该使用 inner join,应该用 left join 或者 right join

    2010年11月26日 2:54
    版主
  • 另:如果通过join 连接来判断条件,当然也是使用值来判断,如果一个表中的值由null值,它必然会被过滤掉。

    inner join v_GS_X86_PC_MEMORY on (v_GS_X86_PC_MEMORY.ResourceID = v_R_System_Valid.ResourceID) 

    如果这种情况,还需要在report中保留这些null值,就不应该使用 inner join,应该用 left join 或者 right join

    多谢版主了,最近我手头其他工作太多都没空研究这个了.现在又来了
    2010年12月31日 16:22