如何总结将其他值分组的不同值

How to summarize on distinct values that group other values

我有这个table:

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 不在 table 中一样: "if I filtered on Family_ID"

A 700*10
B 550 *20

首先,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() 按您传递给它的 table 中的字段分组。由于具有相同 [Family_ID] 的成员在给定的 [Category] ​​中具有相同的 [Spent_Amount] 值,我们需要做的就是根据 table 中的所有内容进行分组,除了 [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]、[权重]、[类别] 和 [Spent_Amount] 进行分组。由于加法和乘法是可交换的,所以先加还是先乘都没有关系。

因此我们使用 SUMX() 遍历由我们的 SUMMARIZE() 编辑的每一行 return 并将每一行的 [Weight] * [Spent_Amount] 的值累加到总和中分组 table.

这是我的示例数据的图像,并且根据此度量适当地执行枢轴 table。在将 table 中的任何属性添加到过滤上下文时,它也适用。如果一个 [Person_ID] 在上下文中,则该度量将 return 家庭的值,并且在家庭级别将 return 家庭的值。如有必要,我们可以将度量更改为仅给出 [Person_ID] 整体中的单个 [Person_ID] 部分。