进一步划分已经很复杂的计算 [英] Further Partitioning an Already Complex Calculation

查看:24
本文介绍了进一步划分已经很复杂的计算的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

小猪-支持我之前的问题:SUMX, SUMMARIZE, and missing values

我有一条新的皱纹,我不太清楚。我本以为这很简单,甚至不会有问题,但我来了。

Alexis为我计算了这个解决方案,该解决方案计算每个管道事件的最终金额,并将其相加,得出准确的总计。我现在需要做的是显示所有按给定时间段的最终概率值划分的聚合数据。问题是,相同的数据在更细粒度的水平上出现在多个地方,即使总计仍然是正确的。让我倒回去一点.

我们有管道历史记录和管道事件历史记录。我已经编写了一个SQL查询,将它们拉到每个匹配对的一行中。每行包含一个"Amount"和一个"eveProb"。后者是集合{0,10,30,50,70,90,100}中的一个数字,它反映了特定事件成功关闭的概率。这些值位于名为tblProb[prob]的链接表中。随着时间的推移,这两个值都可能会更改,因此我可能会得到一个特定事件的结果集,如下所示:

Pipeline_id date_last_mod 管道事件id 金额 eveprob
P-03 2020年1月1日 PE-04 200 10
P-03 2020年3月1日 PE-04 200 30
P-03 2020年5月1日 PE-04 200 30
P-03 2020年5月15日 PE-04 400 50

我的数据透视表为我提供的是:

年/月 0 10 30 50 70 90 100 合计
2020年1月 200 200
2020年2月 200 200
2020年3月 200 200 200
2020年4月 200 200 200
2020年5月 200 400 400 400

我想要的是:

年/月 0 10 30 50 70 90 100 合计
2020年1月 200 200
2020年2月 200 200
2020年3月 200 200
2020年4月 200 200
2020年5月 400 400

这是我现在的衡量标准:

Revenue:=
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]
    )

我曾尝试将tblProb[prob]添加到汇总和/或调整计算以匹配过滤上下文中的prob值,但是我要么做错了,要么是采用了错误的方法。如果你能帮我,我会欠你一个大人情。谢谢您。

推荐答案

您的解决方案去掉了一些冗余:

Revenue := 
VAR MaxDate = MAX ( tblDates[Date] )
RETURN
    SUMX (
        ADDCOLUMNS (
            CALCULATETABLE (
                SUMMARIZE (
                    qryPipelineUS,
                    qryPipelineUS[pipeline_id],
                    qryPipelineUS[pipeline_event_id]
                ),
                ALL ( tblDates )
            ),
            "temp",
                CALCULATE (
                    VAR LastProb =
                        CALCULATE (
                            CALCULATE (
                                MAX ( qryPipelineUS[eveProb] ),
                                LASTNONBLANK (
                                    qryPipelineUS[date_last_mod],
                                    CALCULATE ( SUM ( qryPipelineUS[amount] ) )
                                ),
                                ALL ( tblDates )
                            ),
                            ALL ( tblProb )
                        )
                    RETURN
                        CALCULATE (
                            SUM ( qryPipelineUS[amount] ),
                            LASTNONBLANK (
                                qryPipelineUS[date_last_mod],
                                CALCULATE ( SUM ( qryPipelineUS[amount] ) )
                            ),
                            tblProb[Prob] = LastProb
                        ),
                    tblDates[Date] <= MaxDate
                )
        ),
        [temp]
    )

(作为解决方案发布,因为它不能作为注释使用。)

这篇关于进一步划分已经很复杂的计算的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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