【问题标题】:Total Sum for max sequence per group for point in time时间点每组最大序列的总和
【发布时间】:2019-08-15 22:18:08
【问题描述】:

我正在尝试执行以下操作,但没有成功。我有一个具有以下结构的表:

对于每个 VisitNumber 我有几个 Bill_Id,每个 Bill_Id 有几个序列与几个访问日期相关联,每个序列号都有一个关联的付费金额。

对于每个 [VisitNumber] 和每个 [Bill_Id],我希望能够获取最大序列 [Seq Number] 并将所有这些 [Paid] 金额相加。

最初,我只是使用以下方法在计算列中设置一个标志:

IsMaxSeq =
VAR BillId = Data[Bill_ID]
VAR SeqNo = Data[Seq Number]
RETURN
    IF (
        COUNTROWS (
            FILTER ( Data, AND ( Data[Seq Number] > SeqNo, Data[Bill_ID] = BillId ) )
        ) > 0,
        "No",
        "Yes"
    )

这对于静态计算很好,但我很难将它动态地结合到度量中。

我已经能够获得每个 [Bill_Id] 的最大序列,并使用以下 DAX(和其他几个版本)对这些数量求和:

MaxSequenceSum =
CALCULATE (
    SUM ( Data[Paid] ),
    FILTER (
        ALLSELECTED ( Data[Seq Number] ),
        Data[Seq Number] = MAX ( Data[Seq Number] )
    )
)

产生:

但正如您所见,总数只是整个集合的最大序列。我想获得每个 [VisitNumber] 的每个 [Bill_Id] 的最大序列的所有支付金额的总和。全套将有数千个 [VisitNumber],每个都有数百个 [Bill_Ids],我希望能够在卡片或矩阵中使用它。我非常感谢任何帮助,谢谢。

【问题讨论】:

    标签: powerbi ssas dax


    【解决方案1】:

    这里的关键是您在度量中使用 MAX,当对整个数据集进行评估时,这将产生与上一时期评估时相同的值。这就是为什么总计的结果与其中具有最高值或 [Seq Number] 的子集的结果相似的原因。

    诀窍是使用迭代计算,因此总数据集在汇总之前总是在较小的子集中进行评估。为此,SUMX() 似乎是最合适的。试试下面的例子:

    MaxSequenceAlt = 
    SUMX (
        SUMMARIZE ( Data , Data[VisitNumber] , Data[Bill_Id] ),
        var _maxSequence = CALCULATE ( MAX ( Data[Seq Number] ) , ALLSELECTED ( Data[Seq Number] ) )
        RETURN
            CALCULATE( 
                SUM ( Data[Amount] ) ,
                Data[Seq Number] = _maxSequence
            )
    )
    

    评估结果如下:

    【讨论】:

    • 哇,多么漂亮的解决方案,非常感谢您的帮助!我明白你做了什么我只是不明白你是怎么想出来的,哈哈再次感谢!!
    猜你喜欢
    • 2018-05-15
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    相关资源
    最近更新 更多