在 DAX 中查找她经常订购的产品
Find which product is often ordered with her one in DAX
我有一份包含 table 的 powerbi 报告,如下所示:
产品编号
交易编号
数量
一个
X
1
B
X
2
C
X
1
一个
Y
2
B
Y
1
一个
Z
1
C
Z
1
我想在 dax 中创建一个新的 table,它会显示之前 table 中每个唯一出现的产品 ID,同时购买的每个产品(=在一笔交易中),以及相关数量的总和。
所以对于上面的例子,这会给出一个 table 比如:
产品编号
关联产品 ID
数量
交易次数
一个
B
3
2
一个
C
2
2
B
一个
3
2
B
C
1
1
C
一个
2
2
C
B
2
1
我希望这已经够清楚了。
在 SQL 中我可能会成功,但我不知道如何在 DAX 中做到这一点(使用生成的 DAX table)
有人可以帮我吗?
谢谢
这可能有点棘手,我不知道它在大型数据集上的表现如何。我使用 GENERATE 创建 Main 和 AssociatedProduct(第一步创建一个交叉连接!),然后我们将 MainProd 打包到变量以生成具有所有事务 ID (__Trans) 的虚拟表。然后我们可以轻松地将 [AssociatedProd] 与源 ProductId 和交易与我们的 __Trans 进行比较。最后,我删除了 SelfRelation(产品 A 与产品 A)。
AssocAgg =
FILTER (
GENERATE (
SELECTCOLUMNS (
VALUES ( Associated[Product ID] ),
"MainProd", Associated[Product ID]
),
VAR __Main = [MainProd]
VAR __Trans =
CALCULATETABLE (
VALUES ( Associated[Transaction ID] ),
Associated[Product ID] = __Main
)
RETURN
ADDCOLUMNS (
SELECTCOLUMNS (
VALUES ( Associated[Product ID] ),
"AssociatedProd", Associated[Product ID]
),
"Trans",
CALCULATE (
COUNTROWS ( VALUES ( Associated[Transaction ID] ) ),
FILTER (
Associated,
[AssociatedProd] = Associated[Product ID]
&& Associated[Transaction ID] IN __Trans
)
),
"qty",
CALCULATE (
SUM ( Associated[Qty] ),
FILTER (
Associated,
[AssociatedProd] = Associated[Product ID]
&& Associated[Transaction ID] IN __Trans
)
)
)
),
[AssociatedProd] <> [MainProd]
)
我有一份包含 table 的 powerbi 报告,如下所示:
产品编号 | 交易编号 | 数量 |
---|---|---|
一个 | X | 1 |
B | X | 2 |
C | X | 1 |
一个 | Y | 2 |
B | Y | 1 |
一个 | Z | 1 |
C | Z | 1 |
我想在 dax 中创建一个新的 table,它会显示之前 table 中每个唯一出现的产品 ID,同时购买的每个产品(=在一笔交易中),以及相关数量的总和。
所以对于上面的例子,这会给出一个 table 比如:
产品编号 | 关联产品 ID | 数量 | 交易次数 |
---|---|---|---|
一个 | B | 3 | 2 |
一个 | C | 2 | 2 |
B | 一个 | 3 | 2 |
B | C | 1 | 1 |
C | 一个 | 2 | 2 |
C | B | 2 | 1 |
我希望这已经够清楚了。
在 SQL 中我可能会成功,但我不知道如何在 DAX 中做到这一点(使用生成的 DAX table)
有人可以帮我吗?
谢谢
这可能有点棘手,我不知道它在大型数据集上的表现如何。我使用 GENERATE 创建 Main 和 AssociatedProduct(第一步创建一个交叉连接!),然后我们将 MainProd 打包到变量以生成具有所有事务 ID (__Trans) 的虚拟表。然后我们可以轻松地将 [AssociatedProd] 与源 ProductId 和交易与我们的 __Trans 进行比较。最后,我删除了 SelfRelation(产品 A 与产品 A)。
AssocAgg =
FILTER (
GENERATE (
SELECTCOLUMNS (
VALUES ( Associated[Product ID] ),
"MainProd", Associated[Product ID]
),
VAR __Main = [MainProd]
VAR __Trans =
CALCULATETABLE (
VALUES ( Associated[Transaction ID] ),
Associated[Product ID] = __Main
)
RETURN
ADDCOLUMNS (
SELECTCOLUMNS (
VALUES ( Associated[Product ID] ),
"AssociatedProd", Associated[Product ID]
),
"Trans",
CALCULATE (
COUNTROWS ( VALUES ( Associated[Transaction ID] ) ),
FILTER (
Associated,
[AssociatedProd] = Associated[Product ID]
&& Associated[Transaction ID] IN __Trans
)
),
"qty",
CALCULATE (
SUM ( Associated[Qty] ),
FILTER (
Associated,
[AssociatedProd] = Associated[Product ID]
&& Associated[Transaction ID] IN __Trans
)
)
)
),
[AssociatedProd] <> [MainProd]
)