如何总结将其他值分组的不同值
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] 部分。
我有这个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] 部分。