Dax SUMX DISTINCT PowerPivot未按预期工作

Dax SUMX DISTINCT PowerPivot未按预期工作,dax,powerpivot,Dax,Powerpivot,我从SQL查询返回了如下数据: REF ORDER R_UNITS R_STOCK COMPONENT ------------------------------------------- TOY1 SP1 500 350 BLISTER TOY1 SP2 400 350 BLISTER TOY1 SP3 100 350 BLISTER TOY2 SP

我从SQL查询返回了如下数据:

REF   ORDER   R_UNITS   R_STOCK   COMPONENT
-------------------------------------------
TOY1   SP1      500       350      BLISTER
TOY1   SP2      400       350      BLISTER    
TOY1   SP3      100       350      BLISTER    
TOY2   SP1      200       200      BLISTER   
TOY2   SP4      300       200      BLISTER    
TOY3   SP1      600       300      BLISTER     
TOY3   SP1      400       300        BOX
我想这样将其透视到Excel透视表中:

FILTER ORDER: ALL

COMPONENT   R_UNITS   Σ R_STOCK
BLISTER      2100        850  
BOX          400         300    
R_STOCK应迭代数据,并根据唯一的参考值总结结果

我尝试了这个DAX公式:

Σ R_STOCK:=SUMX(DISTINCT(Table6[REF]),AVERAGE(Table6[REF STOCK]))
但它不是汇总泡罩的每个唯一值(300+350+200=850),而是对所有行的总数进行平均,然后将结果乘以唯一值的数量:(350+350+350+200+200+300)/6*3=875

我如何修正我的DAX公式


非常感谢

我认为我们需要使用summary来获得REF和REF STOCK的不同对,然后添加REF STOCK。我还将添加一个过滤器修改器,以除去组件上的过滤器之外的任何可能的过滤器

R_STOCK :=
CALCULATE(
    SUMX( SUMMARIZE( Table6, Table6[REF], Table6[REF STOCK] ), Table6[REF STOCK] ),
    ALLEXCEPT( Table6, Table6[COMPONENT] )
)

你可以试试这样的

Σ R_STOCK :=
VAR __WithAverages =
    ADDCOLUMNS (
        DISTINCT ( Table6[REF] ),
        "@AverageStock", CALCULATE ( AVERAGE ( 'Table6'[R_STOCK] ) )
    )
RETURN
    SUMX ( __WithAverages, [@AverageStock] )

谢谢,成功了!我需要在不使用filter ALLEXCEPT的情况下使用它,这样我就可以在透视表上按REF进行筛选。我也考虑过这个选项:
=SUMX(DISTINCT(Table6[REF]),FIRSTNONBLANK(Table6[REF STOCK],0))
,但我不知道它是否像你的一样可靠。感谢再次以这种方式使用FIRSTNONBLANK,将0作为表达式看起来像一个黑客,它在每次迭代中执行上下文转换,但它可以工作。只有差异,如果每个参考的参考库存值不同,则仅使用最小值,而使用SUMMARY的解决方案将添加它们。我认为这不应该发生。