ALL()无法在DAX中“删除过滤器”;关系问题?

时间:2018-12-03 19:55:33

标签: powerbi dax

基本前提:

  • “订单”由多个“区域”中的项目组成。
  • 客户可以要求在不足的“订单”上要求“信用”(退款)。
  • 这里存在真正的多对多关系,因为一个订单可以在不同时间调用多个信用。同样,客户可以一次致电多个订单(仅生成一个贷项凭证)。
  • “信用”的粒度位于商品级别,即

    CREDIT  |   SO      |   ITEM    |   ZONE    |   CREDAMT
    -------------------------------------------------------
    42      |   1       |   56      |   A       |   $6
    42      |   1       |   52      |   A       |   $8
    42      |   1       |   62      |   B       |   $20
    42      |   2       |   56      |   A       |   $12
    
  • “订单明细”的粒度位于区域级别,即

    SO      |   ZONE    |   DOL_AMT
    -------------------------------
    1       |   A       |   $50
    1       |   B       |   $20
    1       |   C       |   $100
    2       |   A       |   $26
    
  • 我有一个“区域”过滤器表,可以帮助我更好地进行分类并汇总到更广泛的类别,即

    ZONE    |   TEMP    |   SORT
    -------------------------------
    A       |   DRY     |   2
    B       |   COLD    |   3
    C       |   DRY     |   1
    

我需要什么:

  • 我想要一对视觉效果,以便按地区对订单总数与按地区对信用总额的比较。

工作原理:

  • “信用”组件很简单,CreditTotal = abs(sumx(Credits,Credits[CREDAMT]))带有“区域”作为图例项。
  • 我有一个ORDER组件,当区域在贷项通知单中时,该组件工作

    Order $ by Zone =
    CALCULATE (
      SUM ( 'Order Details'[DOL_AMT] ),
      USERELATIONSHIP ( 'Order Details'[SO], Credits[SO] ),
      ALL ( Credits[CreditCategory] )
    )
    

我的问题:

  • 没有 信誉的区域不会显示。因此,而不是

    CREDIT  |   ZONE    |   ORDER $ BY ZONE
    ----------------------------------
    42      |   A       |   $76
    42      |   B       |   $20
    42      |   C       |   $100
    

    我明白了

    CREDIT  |   ZONE    |   ORDER $ BY ZONE
    ----------------------------------
    42      |   A       |   $76
    42      |   B       |   $20
    

我尝试通过添加ALL(Zones[Zone])和/或ALL('Order Details'[Zone])来删除此过滤器,但这没有帮助,大概是因为它 报告了“所有区域”实际上可以在“信用”表中找到。 我希望有某种方法可以要求它根据“贷方”表中的SO报告“订单明细”表中的所有区域。

在有帮助的情况下,以下是关系的结构;顺便说一句,我尝试过混合使用和混合使用主动/非主动,单向与双向过滤等各种组合,但是当前配置似乎是唯一可以按需远程工作的配置。 Relationships in data model

我很感谢任何建议;请让我知道是否有任何不清楚的地方。谢谢。

1 个答案:

答案 0 :(得分:1)

通过使用'Order Details'[Zone]而不是表格视觉和此度量中的Zones[Zone],我能够使它工作:

Order $ by Zone = 
CALCULATE (
  SUM ( 'Order Details'[DOL_AMT] ),
  USERELATIONSHIP ( 'Order Details'[SO], Credits[SO] )
)

请注意,无论采取何种措施,Credits中都没有与区域C相对应的行,因此除非您告诉它,否则它不知道要在CREDIT列中放置什么确切的方法。

如果您删除了CREDIT维度列,则不需要像我上面建议的那样交换表。您可以只使用上面的度量,然后为CREDIT列写一个新的 measure

CreditValue =
CALCULATE(
    VALUES(Credits[CREDIT]),
    ALL(Credits),
    Credits[SO] IN VALUES('Order Details'[SO])
)