首页 > 解决方案 > 平均值除以每个项目的数量

问题描述

我有三个表时间,SectorProject,产品项目。

Time AS(
    SELECT *
    FROM (VALUES(1011,48),(201,520),(36,120))V(id_project,time)),
SectorProject AS(
    SELECT *
    FROM (VALUES(1011,'BM'),(1011,'Fi'),(1011,'Om'),(201,'BM'),(36,'BM'))V(id_project,Sector1)),
    prductProject AS(
    SELECT *
    FROM (VALUES(1011,'bike'),(1011,'velo'),(1011,'pc'),(201,'n'),(36, 'r' ))V(id_project,product))

 

我需要计算平均值除以每个项目的计数

在此处输入图像描述

使用 sql server 它将类似于以下代码:

avg( sum(time)) over (partition by t.id_project) * 1.0 / count(*) over (partition by t.id_project)

如何在 Dax 中做同样的事情。

标签: powerbidax

解决方案


您应该查找“按类别求和”以找到正确的 DAX 模式。

SumOverPartition:=
CALCULATE (
    SUM ( T[Sales] ),
    REMOVEFILTERS ( 'T' ),
    VALUES ( T[Category] )
)

CountOverPartition:=
CALCULATE (
    COUNTROWS ( T ),
    REMOVEFILTERS ( 'T' ),
    VALUES ( T[Category] )
)

您也可以使用 ALLEXCEPT 函数来实现它,但 REMOVEFILTERS 和 VALUE 对更好。学会了艰难的方式。

https://www.sqlbi.com/articles/using-allexcept-versus-all-and-values/ 在那篇文章中,他们使用古老的名称 ALL 而不是REMOVEFILTERS

如果您希望它在计算列中,那么您必须用另一个 CALCULATE 包装它。

SumOverPartition:=
CALCUALTE
   CALCULATE (
       SUM ( T[Sales] ),
       REMOVEFILTERS ( 'T' ),
       VALUES ( T[Category] )
   )
)

推荐阅读