【问题标题】:Pivottable on SSAS cube: hide rows without result on measureSSAS 多维数据集上的数据透视表:隐藏没有测量结果的行
【发布时间】:2016-02-12 09:22:35
【问题描述】:

我在隐藏所选度量的某些维度成员没有数据的行时遇到问题,但是度量组中有该成员的行。

考虑测量组的以下数据源:

+---------+----------+----------+----------+--------+
| invoice | customer | subtotal | shipping | total  |
+---------+----------+----------+----------+--------+
| 1       | a        | 12.95    | 2.50     | 15.45  |
| 2       | a        | 7.50     |          | 7.50   |
| 3       | b        | 125.00   |          | 125.00 |
+---------+----------+----------+----------+--------+

当尝试基于 SSAS 多维数据集中的度量组创建数据透视表时,可能会导致以下结果:

但是,我想隐藏Customer b 的行,因为在给定的数据透视表中没有结果。我尝试使用 Pivottable Options -> Display -> Show items without data on rows 但这仅适用于显示/隐藏在给定度量值组中根本没有引用的客户,例如 Customer c

有没有办法隐藏给定度量没有结果的行,而不创建单独的度量组WHERE shipping IS NOT NULL

我使用的是 SQL-server 2008 和 Excel 2013

编辑:

为了澄清,我使用 Excel 连接到 SSAS 多维数据集。生成的数据透视表(在 Excel 中)看起来像给定的图像。

【问题讨论】:

  • 请显示您当前使用的查询...
  • @Shnugo:因为我使用 Excel 连接到 SSAS 多维数据集,所以我没有使用任何查询。我已经在问题中记录了这一点,因为这似乎不太清楚(足够)。
  • @Aquillo 正在“运送”物理测量的计算测量。当您单击客户 B 的空白运输单元格时,您会在公式栏中看到什么?您的运费格式字符串是什么?
  • @GregGalloway 这是一种物理测量,但如果在这种情况下需要计算测量,我肯定会考虑它。请注意,我希望对此有一个“全方位”的解决方案,使用维度Customer 只是一个示例。如果我的要求是不可能的,并且每种情况都需要自定义计算,那就这样吧,但至少我会知道。
  • @Aquillo 你能回答我上面所有的问题吗?

标签: sql-server excel ssas pivot-table olap-cube


【解决方案1】:

在 DSV 中找到包含 shipping 列的表,并添加一个带有表达式的计算列:

Case when shipping <> 0 then shipping end

请在 BIDS 的多维数据集设计器中转到 Shipping 度量的属性窗口,并将 NullHandling 属性更改为 Preserve。将源列更改为新的计算列。然后重新部署,我希望你的枢轴中的那一行会消失。

并确保未选中 Pivottable Options -> Display -> Show items without data on rows。

如果还是不行,将 Management Studio 的对象资源管理器窗口连接到 SSAS 并告诉我们它在服务器节点中显示的版本号。可能是您没有使用最新的服务包,这是一个错误。

【讨论】:

  • 尝试使用 Preserve as NullHandling 属性且未选中该选项。没有变化,我认为这是因为给定成员实际上有行,只是没有给定度量的值。版本是 10.50.6000.34
  • 问题在于,尽管源表中没有零值,但 Excel 仍然显示零。对WHERE shipping = 0 的快速查询不会给出任何结果。度量(组)直接基于表,没有命名查询或表达式。
  • @Aquillo 如果您注释掉除 CAlCULATE 之外的整个 MDX 脚本,它还会显示 0 吗?你有哪里的运费是空行吗?您确实设置了 NullHandling = Preserve 对吗?除非您更改度量上的设置,否则 Null 将在 SSAS 中存储为 0。
  • 格雷格,非常感谢您的帮助。 NullHandling-property 似乎已经解决了这个问题。我不清楚为什么之前的测试没有修复它,但我想这是由于重新处理或类似的原因。
【解决方案2】:

进入 Excel 中的数据透视表,点击客户列上的下拉菜单。在下拉菜单中,您会找到一个名为 Value Filters 的选项。您可以在此处设置 Shipping 大于 0.1

这会根据度量值过滤您的客户维度列。

【讨论】:

    【解决方案3】:

    可能是这样的(但我没有看到枢轴...)

    DECLARE @tbl TABLE(invoice INT,customer VARCHAR(10),subtotal DECIMAL(8,2),shipping DECIMAL(8,2),total DECIMAL(8,2));
    INSERT INTO @tbl VALUES
     (1,'a',12.95,2.50,15.45)
    ,(2,'a',7.50,NULL,7.50)
    ,(3,'b',125.00,NULL,125.00);
    
    SELECT customer, SUM(shipping) AS SumShipping
    FROM @tbl 
    GROUP BY customer
    HAVING SUM(shipping) IS NOT NULL
    

    【讨论】:

    • 这是 SSAS 而不是 SQL
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    相关资源
    最近更新 更多