在 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]
)