Matrix DAX中的乘法矩阵

Matrix DAX中的乘法矩阵,matrix,powerbi,linear-algebra,matrix-multiplication,dax,Matrix,Powerbi,Linear Algebra,Matrix Multiplication,Dax,假设我有两个矩阵MatrixA和MatrixB,如下所示(其中I是行号,j是列号: MatrixA | MatrixB i | j | val | i | j | val ---|---|---- | ---|---|---- 1 | 1 | 3 | 1 | 1 | 2 1 | 2 | 5 | 1 | 2 | 3 1 | 3 | 9 | 2 | 1 | 7 2 | 1 | 2 | 2 | 2 | -

假设我有两个矩阵
MatrixA
MatrixB
,如下所示(其中
I
是行号,
j
是列号:

 MatrixA       |   MatrixB

 i | j | val   |   i | j | val
---|---|----   |  ---|---|----
 1 | 1 |  3    |   1 | 1 |  2
 1 | 2 |  5    |   1 | 2 |  3
 1 | 3 |  9    |   2 | 1 |  7
 2 | 1 |  2    |   2 | 2 | -1
 2 | 2 |  1    |   3 | 1 |  0
 2 | 3 |  3    |   3 | 2 | -4
 3 | 1 |  3    |
 3 | 2 | -1    |
 3 | 3 |  2    |
 4 | 1 |  0    |
 4 | 2 |  7    |
 4 | 3 |  6    |
以更熟悉的形式,它们看起来如下:

 MatrixA =  3  5  9   MatrixB =  2  3
            2  1  3              7 -1
           -1  2  0              0 -4
            7  0  6
我想计算他们的产品(如中所示):

在我前面使用的unpivoted列表单中,这是

 i | j | val
---|---|----
 1 | 1 |  41
 1 | 2 | -32
 2 | 1 |  11
 2 | 2 |  -7
 3 | 1 |  12
 3 | 2 |  -5
 4 | 1 |  12
 4 | 2 |  -3

我正在寻找一个通用的计算方法,将任何兼容的
k x n
n x m
矩阵相乘,作为一个计算表。

我想我已经算出了。如果
MatrixA
k x n
并且
MatrixB
n x m
维的:

Product = 
   ADDCOLUMNS(
       CROSSJOIN(VALUES(MatrixA[i]), VALUES(MatrixB[j])),
       "val",
       SUMX(
          ADDCOLUMNS(
             SELECTCOLUMNS(GENERATESERIES(1, DISTINCTCOUNT(MatrixA[j])), "Index", [Value]),
             "A", LOOKUPVALUE(MatrixA[val], MatrixA[i], [i], MatrixA[j], [Index]),
             "B", LOOKUPVALUE(MatrixB[val], MatrixB[i], [Index], MatrixB[j], [j])),
          [A] * [B]))
CROSSJOIN
创建了一个新表,其中包含列
[i]
[j]
具有
k x m
行。对于此交叉联接表中的每个
i
j
行对,该单元格的值计算为
i
MatrixA
MatrixB
j
列的和积。
GENERATESERIES
位只创建一个
索引
列表具有匹配维度长度的

例如,当
i=3
j=2
时,给定示例的中间部分为

ADDCOLUMNS(
    SELECTCOLUMNS(GENERATESERIES(1, DISTINCTCOUNT(MatrixA[j])), "Index", [Value]),
    "A", LOOKUPVALUE(MatrixA[val], MatrixA[i], 3, MatrixA[j], [Index]),
    "B", LOOKUPVALUE(MatrixB[val], MatrixB[i], [Index], MatrixB[j], 2))
这将生成表

Index |  A  |  B
------|-----|----
 1    | -1  |  3
 2    |  2  | -1
 3    |  0  | -4

其中,
[A]
列是
矩阵的第三行,
[B]
列是
矩阵xb的第二行

我只是好奇为什么在幂BI中会有如此奇怪格式的矩阵?@FoxanNg由于DAX的列性质,它确实是唯一对我有意义的格式。你对它们的格式有更好的建议吗?这是矩阵的一种奇怪表示形式@AlexisOlson我实际上建议不要在Power BI中首先进行矩阵乘法。现在,Power BI中既有Python脚本,也有R脚本,这两种语言都只需要一行代码就可以实现。虽然我不确定数据管道是如何进行的,以及如何获得矩阵,但这可能是最好的方法,也可能不是最好的方法@FoxanNg这方面的问题是,所有内容都必须预先计算。除非使用DAX或预先计算所有可能的切片器设置组合,否则无法与切片器进行动态交互,这通常是不可行的。
Index |  A  |  B
------|-----|----
 1    | -1  |  3
 2    |  2  | -1
 3    |  0  | -4