如何为单选题制作列联表?

时间:2019-08-05 18:56:15

标签: dax powerpivot

我只需要为一个有多个选择的问题做一个交叉表。

我有一个调查结果。这样做的目的是看到知道Brand1和其他品牌的人的份额。

可以说我们有一个包含答案的输入表:

Id  Brand1  Brand2  Brand3  Brand4
1   1       1       0       1
2   0       0       1       1
3   1       1       0       0
4   1       0       0       1
5   0       0       1       1
6   0       0       1       0
7   1       1       0       1

我们制作了一个交叉表,列出了每个品牌的答案总和:

        Brand1  Brand2  Brand3  Brand4
Brand1  4       3       0       3
Brand2  3       3       0       2
Brand3  0       0       3       2
Brand4  3       2       2       5

然后从了解每个品牌的所有人中计算出列百分比:

        Brand1  Brand2  Brand3  Brand4
Brand1  100%    100%    0%      60%
Brand2  75%     100%    0%      40%
Brand3  0%      0%      100%    40%
Brand4  75%     67%     67%     100%

我尝试使dax模式适应Marco Russo和Alberto Ferrari的调查(https://www.daxpatterns.com/survey/)。它适用于调查中的不同问题,但不适用于相同的问题-在相交处显示空白单元格

1 个答案:

答案 0 :(得分:0)

执行此操作可能有更好的方法,但这是一种方法。

我建议您使用超级查询对数据表进行重新处理,以便最终获得如下所示的表:

enter image description here

这是通过从示例数据表开始,取消透视表Brand列,然后使用id列作为链接​​将表与其自身交叉联接来完成的。 (我将取消透视后的[值]列重命名为[Known_TF],将交叉联接后的新[值]列重命名为[AlsoKnown_TF],这与Brands和AlsoKnownBrands相同)

然后创建两个新的尺寸表,它们都只包含品牌的唯一值。是的,两个相同的表。命名一个“已知”,另一个命名为“ Also_known”。

在Power Bi的关系视图中,在'Known'[Brand]和'Data'[KnownBrand]之间创建1:*关系,并在'Also_Known'[Brand]和'Data'[AlsoKnownBrand]之间创建1:*关系。 ,如:

enter image description here

现在编写两项措施:

Value = 
CALCULATE(
    SUM('Data'[AlsoKnown_TF]);
    'Data'[Known_TF] = 1
)

和:

Value_pct = 
DIVIDE(
    [Value];
    CALCULATE(
        SUM('Data'[AlsoKnown_TF]);
        ALL('Data'[Known_TF])
    );
    0
)

在仪表板上,使用矩阵视觉。将“已知” [Brand]作为列,将“ Also_Known” [Brand]作为行,并将度量作为值。您最终会得到这样的内容:

enter image description here

从技术上讲,不必创建两个维度表,可以跳过该部分,也可以跳过解决方案的关系部分。在矩阵中,将“ Data” [KnownBrands]用作列,将“ Data” [AlsoKnownBrands]用作行,您将得到相同的结果。不过,我认为从计算性能的角度来看,最好使用二维表,但是如果我错了,请更正我。