【问题标题】:force 0 when blank with addcolumn summarize excel 2016 dax for more accurate averages使用 addcolumn 为空白时强制 0 汇总 excel 2016 dax 以获得更准确的平均值
【发布时间】: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的

所以对我来说,0 的去向是个谜。

【问题讨论】:

  • 唯一想到的是第二个中的 CROSSJOIN 或 SUMMARIZE 不返回任何行。您可以尝试在 AVERAGEX() 之后添加 + 0
  • averagex() 后没有加 0

标签: excel dax daxstudio


【解决方案1】:

我认为你很复杂

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)

【讨论】:

  • 这不起作用。相反,它用行数除以客户数,而不管客户是否有过滤器。我正在尝试计算一行是否存在。
  • 哦,但这有效:divide(countrows(query1),CALCULATE(DISTINCTCOUNT([customer]),all(Query1[activity_type])))
猜你喜欢
  • 2021-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多