Power BI 矩阵中的自定义聚合列

10
我正在尝试在Power BI报告中创建一个矩阵,汇总销售人员的表现,并切分多种方式。
我知道如何创建一个矩阵,其中行为 - 销售人员,列为 - 产品类型,值为 - 销售计数,这将显示每个销售人员每个产品类型的销售数量,但我还想做到以下几点:
1. 添加一个额外的列集来进行枢轴(例如,销售年份),以便我可以看到按产品类型和年份旋转的销售计数在同一表格中并排显示(即不嵌套)。 2. 在我的矩阵中添加其他摘要列,显示诸如按销售人员平均销售额、按销售人员占总销售额的百分比等值。
为了清晰起见,我想象这将导致一个矩阵,其中列标题读取:销售人员、产品1、产品2、...、年份1、年份2、...、总销售计数、平均销售额、总销售计数的百分比。请参见下面的图像链接(我没有声望点数来包括实际图像)。

image of example matrix

我知道可以通过创建有效复制矩阵分离值的措施并将每个措施作为一个值添加(无列)来实现此目的,但我不想每年或每次添加新产品类型都必须创建新措施并更新矩阵。
我还查看了Power BI市场上的自定义视觉效果,但没有找到可以实现这一点的内容。

1
嗨,我正在尝试复制以下相同的解决方案,您能否展示一下您初始销售表数据集的初始结构。 - PowerStar
1个回答

20

这是可能的,但并不是非常容易。您需要一个带有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

当添加更多产品或年份时,此表格将自动扩展。
(注意:索引列是为了使用按列排序将它们正确排序。)

有了这个,你只需要在矩阵视觉的列上放置 标题,在行上放置 销售员,并在值中使用切换度量即可。

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。)
这是我的表格长什么样子(数据不完全相同但结构类似):

Grouped Table

以下是我为此创建的PBIX文件:

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


1
非常有帮助!!!虽然我的情况不同,但真的救了我! - BeiBei ZHU
1
@Alexis Olson - 感谢您对 SO 的贡献,我有一个关于上述解决方案的问题,基本上我正在尝试复制相同的解决方案,但是无法理解最初的销售表应该是什么样子?像这样(销售人员、产品、年份、金额),一旦销售表的结构清晰了,我是否应该前进并与您创建的标题表建立关系? - PowerStar
1
@balaji,我建议你查看我提供的PBIX文件。当你打开它时,你应该能够看到任何结构和关系。 - Alexis Olson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接