如何解决Power BI |类别数据的折线图百分比
我想以折线图的形式显示我的数据,以该类别的百分比表示。在此母机视图中,我已经使用“显示值为”>“列总计的百分比”处理了用户的百分比数据。
在此图像中您可以看到,我有用户的盘点数量,调查名称和答案文本。我想在Answertext行中显示SurveyName所产生的不同计数用户数据的表象。所以我需要这样的折线图:
答案表:
ResponseID QuestionID QuestionText AnswerID AnswerText
XYZ1 Q1 qtext1 q1a1 q1a1text
XYZ1 Q2 qtext2 q2a1 q2a1text
XYZ1 Q3 qtext3 q3a1 q3a2text
XYZ2 Q1 qtext1 q1a2 q1a2text
XYZ2 Q3 qtext3 q3a1 q3a1text
XYZ3 Q1 qtext1 q1a1 q1a1text
XYZ3 Q2 qtext2 q2a2 q2a2text
XYZ3 Q3 qtext3 q3a2 q3a2text
XYZ4 Q1 qtext1 q1a1 q1a1text
XYZ4 Q2 qtext2 q2a1 q2a1text
XYZ4 Q3 qtext3 q3a2 q3a2text
XYZ5 Q1 qtext1 q1a3 q1a3text
XYZ5 Q2 qtext2 q2a1 q2a1text
XYZ6 Q2 qtext2 q2a3 q2a3text
XYZ6 Q3 qtext3 q3a1 q3a1text
XYZ7 Q1 qtext1 q1a2 q1a2text
XYZ7 Q3 qtext3 q3a2 q3a2text
XYZ8 Q1 qtext1 q1a1 q1a1text
XYZ8 Q2 qtext2 q2a2 q2a2text
XYZ8 Q3 qtext3 q3a1 q3a1text
响应表:
SurveyID SurveyName UserID ResponseID
SV_1234 survey1 ABC1 XYZ1
SV_1234 survey1 ABC4 XYZ2
SV_1234 survey1 ABC2 XYZ3
SV_1234 survey1 ABC3 XYZ4
SV_5678 survey2 ABC1 XYZ5
SV_5678 survey2 ABC4 XYZ6
SV_5678 survey2 ABC3 XYZ7
SV_9821 survey3 ABC1 XYZ8
关键问题是根据答案和调查来分配参与一项以上调查的用户数量。因此,在这里我需要找到参与所选调查的普通用户,然后根据所选调查中问题的答案给出这些用户的分布。
解决方法
首先,使用列 ResponseID 连接两个表。现在,在自定义列第一页
下创建此文件SurveyName = RELATED(Responses[SurveyName])
现在创建如下的度量-
percentage =
VAR current_survey_name = MIN(Answers[Surveyname])
VAR distict_resp_id_all_text =
CALCULATE(
DISTINCTCOUNT(Answers[ResponseID]),ALLEXCEPT(
Answers,Responses[SurveyName]
)
)
VAR distict_resp_id_per_text =
CALCULATE(
DISTINCTCOUNT(Answers[ResponseID]),Answers[AnswerText],Responses[SurveyName]
)
)
RETURN distict_resp_id_per_text/distict_resp_id_all_text
这是给定样本数据的折线图中的最终输出-
,首先,我们需要计算UserID,而不是responseID。
在这里,我们将首先选择多个调查,如下所示,然后找到参与这些调查的普通用户数量。稍后,我们将根据轴上的SurveyNames给出这些普通用户的分布百分比。当然,这里在轴上每个SurveyName的AnswerText中,UserID百分比的总和应为100。
为此,我首先组合了响应表和答案表。然后,我输入了一个如下的度量值,以找到参与所选调查的普通用户数量。但是,当我将UserID编号添加到折线图时,它不会提供普通用户,而只会提供参与相关调查的总UserID。
//function to simulate the left join
function left_join_array($left,$right,$left_join_on,$right_join_on = NULL)
{
$final = array();
if (empty($right_join_on))
$right_join_on = $left_join_on;
foreach ($left as $k => $v) {
$final[$k] = $v;
foreach ($right as $kk => $vv) {
if ($v[$left_join_on] == $vv[$right_join_on]) {
foreach ($vv as $key => $val)
$final[$k]['_' . $key] = $val; /* add prefix on the key */
break; /* add break here */
} else {
foreach ($vv as $key => $val)
$final[$k]['_' . $key] = NULL; /* add prefix on the key */
}
}
}
return $final;
}
如果您愿意,我可以发送我的电源报告。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。