首页 > 解决方案 > power bi 矩阵中的自定义聚合列

问题描述

我正在尝试在 Power BI 报告中创建一个矩阵,以总结以多种不同方式划分的销售人员绩效。

我知道如何创建一个矩阵,其中包含行 - 销售人员、列 - 产品类型和值 - 销售数量,它将显示每种产品类型的每个销售人员的销售数量,但我还希望能够执行以下操作:

  1. 添加一个额外的列集以透视(例如销售年份),以便我可以在同一个表中并排看到按产品类型和年份旋转的销售计数(即,未嵌套)。
  2. 在我的矩阵中添加额外的汇总列,显示诸如销售人员的平均销售金额、销售人员销售总数的百分比等值。

为了清楚起见,我想这会导致一个矩阵,其中列标题为:销售人员,产品 1,产品 2,...,第 1 年,第 2 年,...,总销售额,平均销售额,占总销售额的百分比。请参阅下面的图片链接(我还没有声誉点来包含实际图片)

示例矩阵的图像

我认识到我可以通过创建有效复制矩阵如何拆分值并将每个度量添加为值(无列)的度量来做到这一点,但我不想每次都创建新度量并更新矩阵年或每次我们添加新的产品类型时。

我还查看了 Power BI 市场上的自定义视觉效果,但没有看到任何可以实现这一目标的方法。

标签: powerbi

解决方案


有可能做到这一点,但并不容易。您需要一个带有SWITCH标题的度量以及一个表格。

您可以按照以下方式创建标题表:

Header =
UNION (
    SUMMARIZE ( Sales, Sales[Product], "Group", "By Product", "Index", 1 ),
    SUMMARIZE ( Sales, Sales[Year], "Group", "By Year", "Index", 2 ),
    DATATABLE (
        "Header", STRING,
        "Group", STRING,
        "Index", INTEGER,
        {
            { " Total", "Summarizations", 3 },
            { "% of Total Sales", "Summarizations", 3 },
            { "Avg Sale Size", "Summarizations", 3 }
        }
    )
)

看起来像这样:

Header,            Group,          Index,
Product 1,         By Product,      1,
Product 2,         By Product,      1,
2016,              By Year,         2,
2017,              By Year,         2,
2018,              By Year,         2,
 Total,            Summarizations,  3,
% of Total Sales,  Summarizations,  3,
Avg Sale Size,     Summarizations,  3

当添加更多产品或年份时,此表将自动扩展。
(注意:该Index列是这样我可以使用按列排序正确排序它们。)

一旦你有了它,你只需要在矩阵视觉的列和行上放置Group和,并在值中使用切换度量。HeaderSalesperson

Measure =
VAR Val =
    SWITCH (
        SELECTEDVALUE ( Header[Group] ),
        "By Product", CALCULATE (
            SUM ( Sales[Amount] ),
            FILTER ( Sales, Sales[Product] = MAX ( Header[Header] ) )
        ),
        "By Year", CALCULATE (
            SUM ( Sales[Amount] ),
            FILTER ( Sales, Sales[Year] = VALUE ( MAX ( Header[Header] ) ) )
        ),
        SWITCH (
            SELECTEDVALUE ( Header[Header] ),
            "% of Total Sales", DIVIDE (
                SUM ( Sales[Amount] ),
                CALCULATE ( SUM ( Sales[Amount] ), ALL ( Sales ) )
            ),
            "Avg Sale Size", AVERAGE ( Sales[Amount] ),
            SUM ( Sales[Amount] )
        )
    )
RETURN
    IF (
        SELECTEDVALUE ( Header[Header] ) = "% of Total Sales",
        FORMAT ( Val, "0.0%" ),
        FORMAT ( Val, "0.0" )
    )

每个不同的组都有自己的计算,我们必须使用该FORMAT函数来强制表格正确格式化百分比函数。

(注意:如果你有切片器或过滤器,你可能想ALLSELECTED在我ALL上面使用的地方使用。)


这是我的表的样子(不是完全相同的数据,而是相似的结构)

分组表

这是我为此创建的 PBIX 文件:

https://drive.google.com/file/d/1qxc5p53MgmOm-NH3EcivkZLhLeEHpr4R/


推荐阅读