通过DAX中的桥接表模拟相关

时间:2015-09-21 12:36:18

标签: many-to-many sugarcrm dax

我正在为基于MySQL的SugarCRM应用程序构建SSAS表格模型。令人不快的SugarCRM功能之一是在真实关系仅为many-to-many的情况下创建桥接表(即实际上one-to-many关系)。当我需要将one侧的表中的值从many侧的表中的计算列中获取时,此冗余桥表会导致问题。

我在many方面的表格中尝试了类似计算列的内容:

=
CALCULATE (
    VALUES ( 'OneSideTable'[field_i_need] ),
    FILTER (
        'OneSideTable',
        CALCULATE (
            COUNTROWS (
                FILTER (
                    'BridgeTable',
                    'BridgeTable'[ManyTableID] = ManyTable[ID]
                )
            )
        )
            = 1
    )
)

但它引发了一个错误:

  

无法在当前上下文中确定表'ManyTable'中列'ID'的值。检查计算表达式中引用的所有列是否存在,并且没有循环依赖项。当度量的公式直接引用列而不对该列执行任何聚合(例如求和,平均值或计数)时,也会发生这种情况。该列没有单个值;它有许多值,每个表对应一行,并且没有指定任何行。

在这种特殊情况下,有没有办法模仿RELATED函数?

1 个答案:

答案 0 :(得分:0)

看起来我找到了解决方案,而且我之前想到的似乎有点简单:

=
CALCULATE (
    VALUES ( 'BridgeTable'[OneTableID] ),
    FILTER (
        RELATEDTABLE ( 'BridgeTable' ),
        'BridgeTable'[deleted] = 0
    )
)

注意使用'BridgeTable'[deleted] = 0过滤规则以避免获取与非活动相关的OneTableID。这是与SugarCRM相关的特殊功能。