平均值除以每个项目的计数

average divided by the count per project

我有三个表 time、SectorProject、product Project。

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 服务器,它将类似于以下代码:

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

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

您应该查找“按类别求和”以找到正确的 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 而不是 .

如果你想把它放在计算列中,那么你必须用另一个 CALCULATE 把它包起来。

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