在Power BI中如何根据度量聚合数据?

4
我创建了一些度量标准,并使用示例表格如下:
水果 水果度量标准 价值
香蕉 甜度 90
香蕉 甜度 80
香蕉 酸度 15
香蕉 酸度 20
桃子 甜度 70
桃子 甜度 65
桃子 酸度 35
桃子 酸度 40
苹果 甜度 65
苹果 甜度 60
苹果 酸度 30
苹果 酸度 25
猕猴桃 甜度 20
猕猴桃 甜度 15
猕猴桃 酸度 85
猕猴桃 酸度 90
基本上,我有一个分类为“水果”的项目和相关的度量标准,我创建了以下度量标准,以获得每种水果的多个甜度/酸度值的总和。我也将列总和的百分比取出(因为甜度/酸度值是不同的刻度,不能直接比较)。例如:%ColTotal = bananaSweetness/TotalFruitSweetness => 170/(170 + 135 + 125 + 35) = .3656,如下所示:
SumPerFruit =
SUMX ( VALUES ( Table[Fruit Measure] ), CALCULATE ( SUM ( Table[Value] ) ) )

PercentageofColTotal_SumPerFruit =
DIVIDE (
    [SumPerFruit],
    SUMX (
        VALUES ( Table[Fruit Measure] ),
        CALCULATE ( SUM ( Table[Value] ), ALLSELECTED ( table[Fruit] ) )
    )
)

这将产生以下计算结果:

水果 水果度量 每个水果的总和 每个水果总和在列总和中的百分比
香蕉 甜味 170 .3656
香蕉 酸味 55 .1029
桃子 甜味 135 .2903
桃子 酸味 75 .2206
苹果 甜味 125 .2688
苹果 酸味 55 .1618
奇异果 甜味 35 .0753
奇异果 酸味 175 .5147

[编辑] 关于SummaryFruitMeasure的更多说明

现在,以上度量值只是将每种水果的多个甜度/酸度值合并为每种水果的两个值--一个用于酸味和一个用于甜味。理想情况下,我只想要一个能总结水果的甜度/酸度值的数值平均值。因此,我想进行以下平均值计算:

BananaSummaryMeasure = (BananaTartness + BananaSweetness)/2 => (.3656 + .1029)/2

因此,我尝试计算每种水果的PercentageofColtotal_SumPerFruit的平均值,如下所示:

SummaryFruitMeasure =
SUMX (
    VALUES ( Table[Fruit] ),
    CALCULATE ( DIVIDE ( SUM ( Table[PercentageofColTotal_SumPerFruit] ), 2 ) )
)

旨在实现以下目的:

水果 SummaryFruitMeasure
香蕉 0.23425
桃子 0.255545
苹果 0.2153
奇异果 0.295

SUM(Table[PercentageofColTotal_SumPerFruit]) 部分出现错误如下:

表 "Table" 中找不到或不能在此表达式中使用列 PercentageofColTotal_SumPerFruit

所以我认为它不能在此表达式中使用,因为它是一个度量值。我该怎么办?我应该使用 SUMMARIZECOLUMNS 还是类似于这样的东西?我不确定是否可以进一步聚合 PercentageofColTotal_SumPerFruit

此外,我必须使用度量值,因为实际数据将进行过滤。

[编辑] 我还研究了类似于 这个,但那会得到一个表格,而我想要的是最后的度量值。


2
请注意:在其他度量中从迭代器调用的度量中不应使用ALLSELECTED。https://www.sqlbi.com/articles/the-definitive-guide-to-allselected/ - sergiom
SummaryFruitMesure 的意图是什么?它如何被解释? - Alexis Olson
@AlexisOlson 我添加了一些澄清,谢谢。 - ocean800
也许这是一个愚蠢的问题,SUMX(Table, [PercentageofColTotal_SumPerFruit])不能满足你的需求吗?我只是粗略地看了一下你的问题,所以有可能我没有理解它的重点 :)。 - W.B.
3个回答

3

根据您的数据粒度,可以采用两种方法。它们可以像这样进行可视化。第一种方法(第一步骤)始终显示所需结果,无论您是否在可视化中放置了水果测量值。第二种方法则不会,并允许您在水果级别和测量级别上查看它。

enter image description here

Measure one =
CALCULATE (
    DIVIDE (
        SUMX (
            VALUES ( Fruit[Fruit Measure] ),
            DIVIDE (
                CALCULATE ( SUM ( Fruit[Value] ) ),
                CALCULATE ( SUM ( Fruit[Value] ), ALLSELECTED ( Fruit[Fruit] ) )
            )
        ),
        COUNTROWS ( VALUES ( Fruit[Fruit Measure] ) )
    ),
    ALLSELECTED ( Fruit[Fruit Measure] )
)

Measure two =
DIVIDE (
    SUMX (
        VALUES ( Fruit[Fruit Measure] ),
        DIVIDE (
            CALCULATE ( SUM ( Fruit[Value] ) ),
            CALCULATE ( SUM ( Fruit[Value] ), ALLSELECTED ( Fruit[Fruit] ) )
        )
    ),
    COUNTROWS ( VALUES ( Fruit[Fruit Measure] ) )
)

我决定使用COUNTROWS()(而不是简单的除以2),使其适用于任何数量的Fruit Measure值。

在第二个度量中,VALUES(Fruit[Fruit Measure])可以放入一个变量中,因为它被重复使用,这样看起来就不那么重复了。

我的建议是采用类似Measure two这样的方法,因为它更加灵活(而且相当优雅),但这取决于您的报告要求。

编辑

实际上,Measure two过于复杂。应该简化为以下形式:

Measure three =
AVERAGEX (
    VALUES ( Fruit[Fruit Measure] ),
    DIVIDE (
        CALCULATE ( SUM ( Fruit[Value] ) ),
        CALCULATE ( SUM ( Fruit[Value] ), ALLSELECTED ( Fruit[Fruit] ) )
    )
)

很抱歉。

enter image description here

回答关于SUM(Table[PercentageofColTotal_SumPerFruit])报错的问题,您可以在SUMX中使用度量值,例如:SUMX(Table, [PercentageofColTotal_SumPerFruit])。请注意,我并未指出此操作在此上下文中是否正确。

编辑2

这是对基于评论的Measure one的另一种看法。 这次它根据所有水果计算值,而不考虑切片器选择/过滤。

Measure one = 
CALCULATE (
    AVERAGEX (
        VALUES ( Fruit[Fruit Measure] ),
        DIVIDE (
            CALCULATE ( SUM ( Fruit[Value] ) ),
            CALCULATE ( SUM ( Fruit[Value] ), ALL ( Fruit[Fruit] ) )
        )
    ),
    ALL ( Fruit[Fruit Measure] )
)

非常感谢您的回答,我花了一些时间来处理和理解。在这种情况下,“MeasureOne”绝对是更符合我需求的那个,但我需要进行一些修改,因为我需要能够在不重新计算值的情况下进行包含/排除某些水果的可视化过滤。 - ocean800
谢谢您的奖励。让我修改我的答案(和第一个测量)以显示无论进行多少过滤都显示相同的值。 - W.B.

2
您的DAX过于复杂,这让您的工作变得更加困难。具体错误在于,除了表列(度量不是列)外,您不能使用SUM对任何东西进行求和。
我建议您尝试以下方法:
SumValue = SUM ( Table[Value] )

PercentOfTotal =
    DIVIDE (
        [SumValue],
        CALCULATE ( [SumValue], ALLSELECTED ( Table ) )
    )

使用这两个应该可以工作,无论你是否分解成甜/酸。

谢谢,但我写DAX的原因是因为酸度/甜度值在不同的比例尺上,所以我使用“PercentageofColTotal_SumPerFruit”列将它们转换为列总数的百分比,以使它们可比较。我知道我不能对一个度量进行求和,但希望有一些方法可以通过“SUMMARIZE”等方式绕过这个问题,因为我想计算每种水果在“PercentageofColTotal_SumPerFruit”列上的平均值。 - ocean800

1
你可以在度量值中使用summarize
SummaryFruitMeasure =
SUMX (
    SUMMARIZE(
       Table, 
       Table[Fruit],
       Table[Fruit Measure],
       "PercentageTotal", [PercentageofColTotal_SumPerFruit]
    ),
    DIVIDE ( SUM ( [PercentageTotal] ), 2 )
)

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