如何为矩阵视觉对象中的行创建 % 的动态总和?

How can I create a dynamic sum of the % for the rows in a matrix visual?

我是第一次使用这个网站,我是PowerBi的新手,如果问题不清楚,请提前致歉。

这是我正在处理的报告中快速重现的场景: Filtered Picture of the matrix visual

基本上,在其中一个专栏中,我只使用了一个简单的度量来获得金额的 CT%。 当我删除过滤器时,这个将动态更改为正确的 %: Picture of matrix visual 2

我需要的是此视觉对象上的一列,该列将逐行汇总总百分比,以便我确定哪些发票和多少发票加起来等于总计的 10%。

您在图片中看到的其他两列是我创建的 DAX 列:

% 超过一个月 = DIVIDE(('Union table test'[Amount]),CALCULATE(SUM('Union table test'[Amount]),FILTER('Union table test','Union table test'[日期]),DATESBETWEEN('Union table test'[日期],STARTOFMONTH('Union table test'[日期]),EOMONTH('Union table test'[日期],0))),0)

一个月的百分比总和 = CALCULATE(sum('Union table test'[一个月的百分比]),FILTER('Union table test','Union table test'[日期]),DATESBETWEEN('Union table test'[Date],STARTOFMONTH('Union table test'[Date]),EOMONTH('Union table test'[Date],0)),FILTER('Union table test','Union table test'[% over month ]>=EARLIER('Union table test'[一个月的百分比])))

问题是它们只会在应用了适当的过滤器时显示正确的数字,但我想要的是始终根据具有适当百分比的过滤或未过滤状态动态更新的东西。

关于如何做到这一点有什么建议吗?

非常感谢!

你要做的和本文类似(举例): https://exceleratorbi.com.au/pareto-analysis-in-power-bi/

我创建了一个简单的 PBIX 来说明,与上面相比做了一些修改。 PBIX link

我不担心将总和限制在一个月内,但您可以更改为这样做。您应该使用与您的事实相关的日期 table table 来处理 date-related 过滤。

[Sum of %] 度量如下所示:

Sum of % = 
VAR AmountPerInvoice =
    CALCULATETABLE (
        ADDCOLUMNS (
            VALUES ( 'Union table test'[Invoice] ),
            "@AmountPerInvoice", [Amount Sum]
        ),
        ALLSELECTED ()
    )
VAR CurrentAmount =
    MINX (
        VALUES ( 'Union table test'[Invoice] ),
        [Amount Sum]
    )
VAR TotalAmountSum =
    CALCULATE ( 
        [Amount Sum],
        ALLSELECTED (  )
    )
VAR CumulativeAmountSum =
    SUMX (
        AmountPerInvoice,
        IF (
            [@AmountPerInvoice] >= CurrentAmount,
            [@AmountPerInvoice]
        )
    )
RETURN
    DIVIDE ( CumulativeAmountSum, TotalAmountSum )

@Ahr,我对此进行了更深入的修改。

迄今为止我想出的最好的版本 performance-wise,灵感来自 https://www.daxpatterns.com/abc-classification/

我已经更新了上面的PBIX。 PBIX link

关键似乎是创建 table 变量,这些变量可以在 table 视觉对象的每一行中重复使用。 DAX 引擎足够聪明,不会每次都 re-evaluate 这些 table。我的原始版本没有创建用于累积计算的 table,而这个版本创建了 (CumulatedAmountByInvoice)。

我用更大的数据集测试了代码,它是对原始版本的明确改进。

Sum of % V2 =

VAR CurrentInvoice =
    FIRSTNONBLANK (
        TOPN (
            1,
            VALUES ( 'Union table test'[Invoice] ),
            [Amount Sum],
            ASC
        ),
        0
    )
    
VAR TotalAmount =
    CALCULATE (
        [Amount Sum],
        ALLSELECTED ()
    )
VAR AmountByInvoice =
    CALCULATETABLE (
        ADDCOLUMNS (
            VALUES ( 'Union table test'[Invoice] ),
            "@InvoiceAmount", [Amount Sum]
        ),
        ALLSELECTED ()
    )
VAR CumulatedAmountByInvoice =
    ADDCOLUMNS (
        AmountByInvoice,
        "@CumulatedAmount",
        VAR  CurrentInvoiceAmount = [@InvoiceAmount]
        VAR  CumulatedInvoice =
            FILTER (
                AmountByInvoice,
                [@InvoiceAmount] >= CurrentInvoiceAmount
            )
        VAR  CumulatedInvoiceAmount =
            SUMX (
                CumulatedInvoice,
                [@InvoiceAmount]
            )
        RETURN
            CumulatedInvoiceAmount
    )
VAR CurrentInvoiceCumulatedAmount =
    SELECTCOLUMNS (
        FILTER (
            CumulatedAmountByInvoice,
            'Union table test'[Invoice] = CurrentInvoice
        ),
        "@CumulatedAmount", [@CumulatedAmount]
    )
RETURN
    DIVIDE ( CurrentInvoiceCumulatedAmount, TotalAmount )