【问题标题】:How can I include NULLs in a PivotTable Count over SSAS?如何在 SSAS 的数据透视表计数中包含 NULL?
【发布时间】:2016-12-16 13:36:55
【问题描述】:

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

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

我理解您所说的对一个字段与所有字段进行计数的意思,但是正如您在 SSAS 中创建一个新度量值所看到的那样,您可以选择对源表的行数进行计数。这是我所期望的行为,我期望与我的图像中显示的表上的 SELECT * 相同的计数......

【问题讨论】:

  • 使用更合适的字段怎么样?如果Order 字段包含空值,则它不适合计算您想要计算的任何内容(也许是客户?)。请改用表的主键。
  • @PanagiotisKanavos 这就是它应该做的事情吗?它应该只是计算行数?见上图...除非我的理解是错误的...
  • 不,不应该。 NULL 不是项目或订单。他们什么都不是。您不会期望NULL 影响 SQL 计数,为什么您期望它在 SSAS 中表现不同?无论如何,您为什么要使用此字段来计算不同实体的出现次数?
  • 通常人们计算整行,假设整行不为空,使用 COUNT(*) 与可能有 NULL 的 COUNT(someField),因此不等于 ROWCOUNT。或者你可以 COUNT(COALESCE(YourField,1)) 或类似的东西来处理 NULL
  • DimAd 是否有空或零 AdKey 行?我怀疑这是你的问题。当您处理您的多维数据集时,您是否必须调整错误配置设置以使其不会出错?我想知道在处理过程中是否丢弃了空维度键行。

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


【解决方案1】:

我相信 DimAd 没有空或零 AdKey 行。而且我相信在处理过程中,您必须更改错误配置以使其丢弃或忽略任何外键为空的事实表行。

我的首要建议是将事实表外键更改为不为空。您需要在每个维度中创建一个 -1 键,然后在事实表中使用它,而不是像 here 中描述的那样使用 null。

如果这不可行,则将空或零 AdKey 行添加到事实表外键可以为空的任何维度。 SSAS 应该将 Bulls 转换为零,因此任何一个都应该起作用。然后在处理过程中,这些行不会被删除,因为它们连接得很好。而且您不必在处理过程中更改错误配置。

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

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

    • 这仍然无法解释为什么我的度量显示 Source --> VWFactOrder (Row) 并且它没有正确计算行数...
    • 您从未发布过架构或查询。这个部分截图根本没有帮助。 field 定义在哪里?执行的查询是什么?我们无法猜测您的源和字段定义是什么。无论如何,该评论实际上是关于数据透视表 UI 的问题,最好通过查看 Excel 的帮助来回答 - 将光标放在属性中并按 F1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多