MDX 处理负值

Posted

技术标签:

【中文标题】MDX 处理负值【英文标题】:MDX Handling Negative Values 【发布时间】:2017-01-03 18:46:49 【问题描述】:

MDX 查询不能很好地处理负值吗?不是性能明智,但你会得到奇怪的结果吗?

我有一个奇怪的结果。在我的事实表的第一列中,我有一些表示空键值的负值。

我没有创建 MDX 查询。我只是拖放,软件正在创建 MDX。

编辑第 1 部分: 我使用的软件是 Pentaho 用户控制台。为了将其放入用户控制台,我必须使用架构工作台设置架构和多维数据集。

实际数据本身是准确的。

通常,当我向下钻取时,我会返回结果以显示用户控制台正在向下钻取的内容。带有负值;但是,我没有得到任何值。我认为 MDX 对负值的处理方式不同,但我是 MDX 的初学者,我只是基于我 10-15 分钟的 Google 搜索。

样本数据: 维度 id 值:

business_id, carrier_id, at_id, as_id, device_id, created_date_id, created_for_id, cancel_date_id, completed_date_id

度量:activity_count

每列的示例值:

-1, 100, 29, 1, 300, 4269, 500, 1020, -1, 1134

活动计数 = 1

编辑第 2 部分:

我正在努力获取 MDX 日志。

为了简单起见,我现在把 行上的“business_id”, 我唯一的衡量标准是“activity_count” 我正在尝试过滤 business_id = -1。

我对 MDX 没有经验,但我想 MDX 应该是这样的:

select [measures] on columns
from [cube_name]
where [business_filters].[business_id] = -1

现在我收到一条错误消息,因为它说

Mondrian Error:No function matches signature '<Level> = <Numeric Expression>'

但我认为这就是 MDX 的样子,有点。大家觉得呢?

编辑第 3 部分:

有趣的事实:如果我转到数据库表,我的 business_id = -1 的度量值对于任何行都不为空。

如果我生成一些 MDX,则值为 Null。如果我将 -1 值替换为正值,则返回的度量是准确的。为什么是这样 。 . .

select
    non empty [Measures]
on  columns,
    [business_filters].[business_id].[-1]
on  rows
from
    [activities_fact_01]

【问题讨论】:

什么软件?能否提供:样本值、预期输出和实际输出? 我编辑了我上面的帖子来回答你的问题。 在 excel 和金字塔中,我们没有注意到负数被“区别对待” - 不过我不明白你的问题:什么时候被区别对待?跨度> 我终其一生都无法弄清楚为什么该度量显示我的值为 32,但是当我尝试向下钻取时,我没有返回任何数据(这只发生在负键值上)。我的理论是 MDX 不适用于负数。但是我不太了解 MDX,所以我可能是错的。 你需要找出当你向下钻取时正在生成什么 mdx - 它可能只是返回 null 【参考方案1】:

我知道出了什么问题。

这与具有不在维度中的外键值有关。我去 Pentaho 下钻的时候,这些结果都没有回来,因为外键没有对应的主键值。

我花了 1.25 天试图解决这个问题,但你可以打赌我永远不会再犯这个错误 :)

【讨论】:

以上是关于MDX 处理负值的主要内容,如果未能解决你的问题,请参考以下文章

PY YTD 计算的可以处理闰年 MDX 的度量

Microsoft SQL Server 2008 MDX Step by Step中关于MDX Step-by-Step.abf损坏文件的处理

处理 sklearn MultinomialNB 中的负值

MDX - 过滤的 CROSSJOIN 计数 - 性能问题

MDX 范围返回 NULL #VALUE

MDX 向下钻取查询生成