首页 > 解决方案 > 将 DAX 度量保存到表中(ABC /帕累托分析)

问题描述

我目前正在对客户 ID 进行 abc/pareto 分析。

我要计算的是这样的:

ID| Sales / ID |Cum. Sales|  %from total | category
G   15.000,00€  15.000,00 €   21,45%      A
D   5.700,00€   20.700,00 €   29,60%      A
H   4.000,00€   24.700,00 €   35,32%      A
Q   3.800,00€   28.500,00 €   40,75%      A
O   3.650,00€   32.150,00 €   45,97%      A
X   3.500,00€   35.650,00 €   50,97%      B
I   3.350,00€   39.000,00 €   55,76%      B
Ü   3.200,00€   42.200,00 €   60,34%      B
Ö   3.050,00€   45.250,00 €   64,70%      B
N   2.900,00€   48.150,00 €   68,84%      B
J   2.750,00€   50.900,00 €   72,78%      C
Ä   2.600,00€   53.500,00 €   76,49%      C
Z   2.450,00€   55.950,00 €   80,00%      C
Y   2.300,00€   58.250,00 €   83,29%      C
L   2.150,00€   60.400,00 €   86,36%      D
P   2.000,00€   62.400,00 €   89,22%      D
W   1.765,00€   64.165,00 €   91,74%      D
R   1.530,00€   65.695,00 €   93,93%      D
F   1.295,00€   66.990,00 €   95,78%      E
V   1.060,00€   68.050,00 €   97,30%      E
B   825,00€     68.875,00 €   98,48%      E
T   590,00€     69.465,00 €   99,32%      E
M   355,00€     69.820,00 €   99,83%      E
C   120,00€     69.940,00 €   100,00%     E

这样我就可以说“A 级客户”赚了我总利润的 50%。

我使用本教程来创建我的测量:https: //www.youtube.com/watch?v= rlUBO5qoKow

total_sales = SUM(fact_table[sales])
cumulative sales =
    VAR MYSALES = [total_sales]
RETURN

SUMX(
    FILTER(
        SUMMARIZE(ALLSELECTED(fact_table);fact_table[CustomerID];
            "table_sales";[total_sales]);
                [total_sales] >= MYSALES);
                    [table_sales])

由于我正在计算超过 1000 个唯一客户 ID 的累积销售额,因此计算需要很长时间!有没有办法可以将这个计算保存在一个新表中,所以我只需要计算一次?或者有没有人知道一个可以做同样但计算成本更低的测量?

任何帮助深表感谢!

标签: powerbidaxpowerbi-desktop

解决方案


您可以将其作为计算列计算一次,但ALLSELCTED由于计算列无法响应报表过滤器或切片器,因此不会像您预期的那样运行。

但是,您的措施有些效率低下。看起来您正在计算[total_sales]两次,一次是内部SUMMARIZE,一次是FILTER.

我还没有测试过这个措施,但它可能会更快,如下所示:

cumulative sales =
VAR MYSALES = [total_sales]
RETURN
    SUMX (
        FILTER (
            SUMMARIZECOLUMNS (
                fact_table[CustomerID];
                ALLSELECTED ( fact_table );
                "table_sales"; [total_sales]
            );
            [table_sales] >= MYSALES
        );
        [table_sales]
    )

重要的部分是重用[table_sales]FILTERSUMMARIZECOLUMNS也可能会更好一些。


推荐阅读