不同粒度的DAX平均值

时间:2017-09-06 17:43:35

标签: dax ssas-tabular

好的,高度简化的三列表,订单#,产品#和数量......

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

我想计算数量的平均值,所以..这是“默认粒度”:

AvgQty = 60/3 = 20

然而,很简单,我也想删除产品:

Order | Qty
1     | 30
2     | 30

现在数量应该重新聚合[就像他们使用sum()],现在我希望AvgQty返回这些行的平均值...

AvgQty = 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]
    )
)

由于该列的总数在技术上未被产品过滤,因此它仍然不能正常工作,因此它仍然显示不正确的总数......

我不确定如何覆盖这个......?

我的实际计算结果并不仅仅是一个简单的平均值,但我面临的主要问题是确保我可以在一粒新粒子上“重新计算”数量......如果我可以解决这个问题,我可以解决自己的问题..解决方案很可能也是将表加载到订单颗粒的模型!!! ;)

1 个答案:

答案 0 :(得分:0)

我在最后几天也考虑过这个问题,我担心由于以下原因无法解决这个问题:

  • DAX中没有函数返回按行计算的整个表
  • 没有功能告诉你聚合的内容
  • 对于单行,您可以找到使用复杂级联ISFILTERED函数过滤的内容,但这不可行也不可靠
  • 最大的问题:当你处于总计或小计时,没有办法找出用于细节行的内容,因为ISFILTERED,HASONEVALUE等现有函数都不会起作用

所以对于DAX来说,从我的观点来看,目前无法解决这个问题

如果您使用MDX查询模型(例如数据透视表),您可以创建一个MDX度量,它使用AXIS() - 函数返回行/列上使用的集合,它是否为COUNT ()函数