【发布时间】:2020-11-02 23:18:23
【问题描述】:
我有一个包含三列的表:lisa、customers 和 activity_type。我想按客户和活动类型计算行数,然后按活动类型对所有客户进行平均。 如果这是 sql 中的表,我会这样做
SELECT
lisa,
customer,
activity_type,
average(ct)
FROM
(
SELECT
lisa,
customer,
activity_type,
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,
customer,
activity_type,
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(), 0, [C] )
)
和
=
AVERAGEX(
ADDCOLUMNS(
SUMMARIZE( Query1[lisa], Query1[activity_type] ),
"C", CALCULATE( COUNTA( Query1[engagio_activity_id] ) + 0 )
),
IF( [C] = BLANK(), 0, [C] )
)
但尽我所能,我仍然得到: 汇总行中的空白不被视为 0,例如上图中的“否”行。在计算平均值时,该汇总金额会忽略空白。当我把cross join放到dax studio的时候,我强加了0的
【问题讨论】:
-
唯一想到的是第二个中的 CROSSJOIN 或 SUMMARIZE 不返回任何行。您可以尝试在 AVERAGEX() 之后添加 + 0
-
averagex() 后没有加 0