问题描述
我有一个表,该表包含三列:lisa,customers和activity_type。我想按客户和活动类型计算行数,然后按活动类型对所有客户进行平均。 如果这是sql中的表,我会
SELECT
lisa,customer,activity_type,average(ct)
FROM
(
SELECT
lisa,CASE
WHEN
s.ct IS NULL
THEN
0
ELSE
s.ct
END
ct
FROM
(
SELECT
*
FROM
(
SELECT DISTINCT
lisa,customer
FROM
TABLE
),(
SELECT DISTINCT
activity_type
)
)
LEFT JOIN
(
SELECT
lisa,COUNT(*) ct
FROM
TABLE
GROUP BY
1,2,3
)
s
)
s
但是它是Dax,它变得更加困难。我尝试过:
=
AVERAGEX(
ADDCOLUMNS(
CROSSJOIN( VALUES( Query1[customer] ),VALUES( Query1[activity_type] ) ),"C",CALCULATE( COUNTA( Query1[engagio_activity_id] ) + 0 )
),IF( [C] = BLANK(),[C] )
)
和
=
AVERAGEX(
ADDCOLUMNS(
SUMMARIZE( Query1[lisa],Query1[activity_type] ),[C] )
)
但是尽我所能,我仍然得到: 在汇总行(例如上图中的“否”行)中空白不被视为0的情况下。在计算平均值时,该汇总量将忽略空白。当我将交叉连接放入dax工作室时,我强制使用0's
解决方法
我认为你很复杂
Average=
VAR totalCustomers = COUNTROWS(ALL(Query1[customer])) //this gives you total # of customers
RETURN
DIVIDE(COUNT(Query1[engagio_activity_id]) + 0,//the +0 forces the count to always return something
totalCostumers)