不同粒度的 DAX 平均值

DAX Average at different grain

好的,高度简化了 table 三列,订单号、产品号和数量...

Order | Product | Qty
1     | A       | 10
1     | B       | 20
2     | C       | 30

我想计算平均数量,所以..这是在 "default grain":

平均数量 = 60/3 = 20

很简单,但是我还想删除产品:

Order | Qty
1     | 30
2     | 30

现在 Qty 应该重新聚合 [就像使用 sum()] 一样,现在我希望 AvgQty return 这些 new[=34= 的平均值] 行...

平均数量 = 60/2 = 30

如果尝试像这样明确地按顺序分组来做到这一点:

measure :=
IF (
    ISFILTERED ( 'Table'[Product] ),
    AVERAGEX (
        SUMMARIZE (
            'Table',
            'Table'[Order],
            'Table'[Product],
            "SumQty", SUM ( 'Table'[Qty] )
        ),
        [SumQty]
    ),
    AVERAGEX (
        SUMMARIZE (
             'Table',
             'Table'[Order],
             "SumQty", SUM ( 'Table'[Qty] ) ),
        [SumQty]
    )
)

由于技术上未按产品过滤该列的总计,它不太有效,因此它继续显示不正确的总计...

我不确定如何覆盖它..?

我的实际计算不只是一个简单的平均值,但我面临的主要问题是确保我能获得新谷物的 'recalculation' 数量。如果我能做到这一点,我可以解决我自己的问题.. 解决方案很可能也是将 table 加载到模型中的 grain 订单!!! ;)

前几天也在想,恐怕没有办法解决,原因如下:

  • DAX 中没有函数可以 return 整个 table 被计算为您的行
  • 没有函数可以告诉您那里汇总了什么
  • 对于单行,您可以找出使用复杂的级联 ISFILTERED 函数过滤的内容,但这既不可行也不可靠
  • 最大的问题:当您处于总计或小计级别时,无法找出明细行使用的是什么 none 现有函数,如 ISFILTERED、HASONEVALUE、等会起作用

所以对于 DAX,我认为目前无法解决这个问题

如果您使用 MDX 来查询您的模型(例如 Pivot Table),您可以创建一个 MDX 度量,它使用 AXIS()-函数 return 所使用的集合在 rows/columns 上并且它在 COUNT() 函数中