【问题标题】:Poor performance of calculated measures in Tableau from an OLAP Cube datasourceTableau 中来自 OLAP 多维数据集数据源的计算度量的性能不佳
【发布时间】:2014-05-12 08:22:28
【问题描述】:

Tableau 专家您好!

我是 Tableau 的新手,我目前正在处理一个与 OLAP 多维数据集连接的报表。但是,我创建的一些计算量度得到了一些奇怪的性能。

此时我的查询是非常基本的 - 我在其中有订单号,这是最低级别的粒度,我正在按当前日期的输入日期过滤数据。然后我在那里得到了一个衡量标准,这是净价,查询总共返回大约 200 个结果。

然后我使用以下公式创建一个计算度量:

   CASE sign([Price Net]) when 1 then 1 else 0 end

当我将它带入报告时,它工作正常,并在几秒钟内返回正确的值。然后我创建以下公式,它基本上返回相同的值:

   IF [Price Net] <=0 then 1 else 0 end

但是,这个计算字段的性能非常差 - 实际上它只是在尝试运行它时耗尽了内存。就好像第二个公式是查询整个多维数据集,而不是查询中指定的过滤器,而不是只对过滤记录起作用的第一个查询。

在多维数据集上的 Tableau 中创建计算度量时,我们应该注意什么?我真的看不出这两种计算有什么不同?

我从平面数据源创建计算度量的经验表明,计算应该可以正常工作!

谢谢

【问题讨论】:

  • 你用什么牌子的魔方?分析服务?蒙德里安?认知?
  • 它是一个分析服务多维数据集 - 不同的多维数据集可能工作得更好/更差的任何原因?
  • 也许您可以通过将其作为多维数据集级别的计算度量来获得更好的性能。
  • 我也在想同样的事情,但我仍然希望 tableau 能够处理非常简单的计算 - 它可以很好地处理平面数据源!

标签: olap tableau-api


【解决方案1】:

这确实很奇怪,我相信在大多数应用程序中,CASE 的效率不如简单的 if。我不知道这两个例程在 Tableau 中是如何设计的,但也许使用 sign([something]) 比 [something] 本身更容易,因为 sign([something]) 只有 3 个可能的值。不是因为结果相同,计算机在做同样的事情。

顺便说一句,放下CASE,直接用sign([Price Net])作为衡量标准,应该可以节省更多的内存和时间来处理

【讨论】:

  • 感谢您的回复-至少我没有做任何明显错误的事情!仅供参考 - 符号查询可以满足我的要求,但我想我也会想写更复杂的 if's 所以可能不得不重新考虑这一点。我们可以计算立方体中的度量,但老实说,我希望 tableau 能够在前端进行这种性质的度量:(
  • 完全同意。在我完全探索这个工具之前,不要急于下结论。我不知道 Tableau 中的数据源是如何构建的,但是计算的字段在性能和限制方面让我有点失望(后者可能是由于我到目前为止的无知)。不是窗口计算的计算(因此无论您使用什么视图都会给出相同的结果)应该计算一次并作为值存储在数据库中(并且仅在基础更新时重新计算)。这应该会稍微提高性能
【解决方案2】:

我知道我在这里玩得有点晚了,但对于那些将 Tableau 连接到 OLAP 数据源的人来说,了解this document 中描述的 Tableau 限制非常重要

This white paper 阐述了一些问题。

要点:将 Tableau 连接到 OLAP 源需要在查询速度与灵活性和易于实施之间进行权衡:许多可以在连接到关系源时即时创建的计算度量必须在多维数据集本身中实施,或使用 MDX,这会降低 Tableau 报表对于非技术业务用户的拖放式易用性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    相关资源
    最近更新 更多