SUMX、SUMMY和MISSING值 [英] SUMX, SUMMARIZE, and missing values

查看:23
本文介绍了SUMX、SUMMY和MISSING值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个有点复杂的场景,我正尝试使用PowerPivot在Excel中构建该场景。我们有销售渠道项目,每个项目代表一个销售机会,并与这些渠道中的每一个相关联,有许多事件。我有管道和事件的历史记录表,我想用它们来构建一个模型,说明给定销售主管的整个管道集是如何随时间变化的。

我的SQL查询的结果集可能如下所示:

Pipeline_id date_last_mod 管道事件id 金额
P-01 2020年1月1日 PE-01 100
P-02 2020年1月1日 PE-02 500
P-02 2020年1月2日
P-02 2020年1月2日 PE-02 1000
P-03 2020年1月1日 PE-03 200
P-03 2020年3月1日 PE-03 200
P-03 2020年4月1日 PE-04 300
P-03 2020年5月1日 PE-03 400
P-03 2020年5月15日 PE-03 300

我还有一个包含常用字段的日期表。我试图生成的是如下所示的数据透视表。您可以看到,它采用每个管道事件的最新"金额"值,并将这些值合计为每个月底的值。

年份 金额
2020 1 800
2020 2 800
2020 3 800
2020 4 1100
2020 5 1200

看起来解决方案应该是SUMX和LASTNONBLANK。我有一个类似以下内容的度量值:

TestRev:=VAR MaxDate =
    MAX ( qryPipelineUS[date_last_mod] )
        RETURN
SUMX( ADDCOLUMNS( SUMMARIZE( qryPipelineUS, qryPipelineUS[pipeline_id], qryPipelineUS[pipeline_event_id] ), "temp",
CALCULATE (
                SUM ( qryPipelineUS[amount] ),
    LASTNONBLANK( qryPipelineUS[date_last_mod], CALCULATE( SUM( qryPipelineUS[amount] ) ) ),
                ALL( qryDateTable ),
                ALLEXCEPT( qryPipelineUS, qryPipelineUS[pipeline_event_id] ),
                qryPipelineUS[date_last_mod] <= MaxDate ) ), [temp] )

它的问题似乎是汇总函数在没有条目的月份中不会为Pipeline_event_id生成行。说得通,真的。即使我尝试使用CROSSJOIN执行某些操作,我也可以使用所需的ID生成表,但无法使其生成数据。

如果有任何关于我应该如何做的建议,我将不胜感激。这个问题我已经绞尽脑汁好几个星期了,但一无所获。提前谢谢。

推荐答案

此处的关键是对日期表而不是事实表进行日期计算,并删除汇总表上的日期筛选器。

下面是我如何调整您的度量值的方法:

TestRev =
VAR MaxDate =
    MAX ( qryDateTable[Date] )
RETURN
    SUMX (
        ADDCOLUMNS (
            CALCULATETABLE (
                SUMMARIZE (
                    qryPipelineUS,
                    qryPipelineUS[pipeline_id],
                    qryPipelineUS[pipeline_event_id]
                ),
                ALL ( qryDateTable )
            ),
            "temp",
                CALCULATE (
                    LASTNONBLANKVALUE (
                        qryPipelineUS[date_last_mod],
                        CALCULATE ( SUM ( qryPipelineUS[amount] ) )
                    ),
                    qryDateTable[Date] <= MaxDate
                )
        ),
        [temp]
    )

编辑:在Excel中,无法识别LASTNONBLANKVALUE,因此您可以使用此扩展版本:

Test =
VAR MaxDate = MAX ( qryDateTable[Date] )
RETURN
    SUMX (
        ADDCOLUMNS (
            CALCULATETABLE (
                SUMMARIZE (
                    qryPipelineUS,
                    qryPipelineUS[pipeline_id],
                    qryPipelineUS[pipeline_event_id]
                ),
                ALL ( qryDateTable )
            ),
            "temp",
                CALCULATE (
                    CALCULATE (
                        SUM ( qryPipelineUS[amount] ),
                        LASTNONBLANK (
                            qryPipelineUS[date_last_mod],
                            CALCULATE ( SUM ( qryPipelineUS[amount] ) )
                        )
                    ),
                    qryDateTable[Date] <= MaxDate
                )
        ),
        [temp]
    )

请注意,日期过滤NOT与LASTNONBLANK包含在相同的内部计算表达式中。如果这样做,度量值将不会以相同方式工作。

这篇关于SUMX、SUMMY和MISSING值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆