如何汇总对其他值进行分组的不同值

时间:2015-12-29 12:32:27

标签: ssas business-intelligence dax

我有这张桌子:

Family_ID Person_ID Weight Spent_amount category
A           1         10       500        flight
A           2         10       500        flight
A           1         10       200        Hotel
A           2         10       200        Hotel
B           3         20       250        flight
B           3         20       300        Hotel

正如我们在这里看到的,每个家庭都有一个成员,每个类别的成本是针对家庭计算的,而不是针对此人的。而且我们看到并非每个家庭都与其他家庭相同,但它有重量,因此每一个家庭都应该乘以家庭重量。 现在我的目标是为每个家庭编写一个度过的度量

我写了一个等式,但我看到它非常复杂,我猜它给出了错误的值。我写的Dax方程是

cash_wieght:=SUMX (
    SUMMARIZE (
s2g516_full,
s2g516_full[DIM_HOUSEHOLD_REF_ID],
"cash", CALCULATE ( MAXX ( SUMMARIZE (
s2g516_full,
  s2g516_full[Persons],
  s2g516_full[DIM_HOUSEHOLD_REF_ID] ,"cash1", CALCULATE ( Sum(s2g516_full[SPENT_PER_REASON])*MAX ( s2g516_full[Weight] ) )
/distinctcount(s2g516_full[person])  ),[Cash1] ) )
 ),
    [cash]
)

当我通过使用family_ID进行过滤来获取样本时,它为我提供了样本测试的正确数字,但可能没有。那么如何判断我是否得到了正确的结果呢?

我想要的结果是要对weight * spent_amount进行求和并使用family_ID进行过滤,就好像person_ID不在表中一样:"如果我在Family_ID上过滤了"

A 700*10
B 550 *20

1 个答案:

答案 0 :(得分:0)

首先,DAX Formatter是你的朋友。

cash_wieght :=
SUMX (
    SUMMARIZE (
        s2g516_full,
        s2g516_full[DIM_HOUSEHOLD_REF_ID],
        "cash", CALCULATE (
            MAXX (
                SUMMARIZE (
                    s2g516_full,
                    s2g516_full[Persons],
                    s2g516_full[DIM_HOUSEHOLD_REF_ID],
                    "cash1", CALCULATE (
                        SUM ( s2g516_full[SPENT_PER_REASON] ) * MAX ( s2g516_full[Weight] )
                    )
                        / DISTINCTCOUNT ( s2g516_full[person] )
                ),
                [Cash1]
            )
        )
    ),
    [cash]
)

在那之后,我认为你对SUMMARIZE()有正确的直觉,但它可能比你正在做的更简单。 SUMMARIZE()按照传递给它的表中的字段进行分组。由于具有相同[Family_ID]的成员在给定[类别]中具有[Spent_Amount]的相同值,因此我们需要做的就是除了[Person_ID]之外的表中的所有内容。

cash_wieght:=
SUMX (
    SUMMARIZE(
        FactSpend
        ,FactSpend[Family_ID]
        ,FactSpend[Weight]
        ,FactSpend[Category]
        ,FactSpend[Spent_Amount]
    )
    ,FactSpend[Weight] * FactSpend[Spent_Amount]
)

这里我们使用SUMMARIZE()按[Family_ID],[Weight],[Category]和[Spent_Amount]进行分组。由于加法和乘法是可交换的,所以如果我们先添加或先加倍,这并不重要。

因此我们使用SUMX()迭代SUMMARIZE()返回的每一行,并累加该分组表中每行的[Weight] * [Spent_Amount]的值。

这是基于此度量适当执行的​​示例数据和数据透视表的图像。在从表中添加任何属性以过滤上下文时,它也可以工作。如果一个[Person_ID]在上下文中,该度量将返回该族的值,并且在族级别将返回该族的值。我们可以改变度量,只在必要时给出[Family_ID]的整个[Person_ID]部分。

enter image description here