Forum Discussion
Multiple responses from forms combining
- 4 years ago
Hi zaraanderson ,
In this case you need to take a different approach, keeping the responses has you have you can create disconnected tables with the answrs from the multioption. In this case I have created 2 tables:
Now using this I have created the following two measures:
Pet Count = // Character that split phrase into words VAR SplitByCharacter = ";" // Temporary table that splits selected phrase into words VAR Words_table = ADDCOLUMNS ( GENERATE ( SELECTCOLUMNS ( SUMMARIZE ( ALLSELECTED ( 'Sheet1 (2)' ), 'Sheet1 (2)'[Respondent ID], 'Sheet1 (2)'[Pet type (select all that apply)] ), "Find_Text", 'Sheet1 (2)'[Pet type (select all that apply)] ), VAR TokenCount = PATHLENGTH ( SUBSTITUTE ( [Find_Text], SplitByCharacter, "|" ) ) RETURN GENERATESERIES ( 1, TokenCount ) ), "Word", PATHITEM ( SUBSTITUTE ( [Find_Text], SplitByCharacter, "|" ), [Value] ) ) RETURN COUNTROWS ( FILTER ( Words_table, [Word] IN VALUES ( Pets[Pet type] ) ) ) Food Count = // Character that split phrase into words VAR SplitByCharacter = ";" // Temporary table that splits selected phrase into words VAR Words_table = ADDCOLUMNS ( GENERATE ( SELECTCOLUMNS ( SUMMARIZE ( ALLSELECTED ( 'Sheet1 (2)' ), 'Sheet1 (2)'[Respondent ID], 'Sheet1 (2)'[Favourite foods (select all that apply)] ), "Find_Text", 'Sheet1 (2)'[Favourite foods (select all that apply)] ), VAR TokenCount = PATHLENGTH ( SUBSTITUTE ( [Find_Text], SplitByCharacter, "|" ) ) RETURN GENERATESERIES ( 1, TokenCount ) ), "Word", PATHITEM ( SUBSTITUTE ( [Find_Text], SplitByCharacter, "|" ), [Value] ) ) RETURN COUNTROWS ( FILTER ( Words_table, [Word] IN VALUES ( Foods[Favourite foods] ) ) )Has you can see now you can use these two measures on your calculation:
PBIX attach.
Hi,
The number of respondents would now be calculated by the following measure:
=distinctcount(Data[ID})
Hope this heolps.
Thanks Ashish_Mathur for jumping in. I guess the problem is moreso that I have a few more data points with multiple responses that I need to split, which will essentially make my data set grow ridiculously large and effect further other data that I wish to display from other columns, which will have a huge number of duplictaes and then therefore not be accurate?
So here, I have 3 respondents (2 primary, 1 secondary), but because of the split, on my visualisation it now says there are 7 primary and 3 secondary, which of course is inaccurate. Is there a way to fix this? I'd essentially like it to know what is dupllicate and ignore it 😂 as seen in my very technical drawing here:
- Ashish_Mathur4 years agoSuper User
Hi,
Theoretically, you can filter out those rows using the Query Editor but you may nit want to do so because a data point in some other column will also get removed in that process.
- zaraanderson4 years agoFrequent Visitor
Exactly. The logic I'm after I suppose is that if the response id# is the same as the row above, ignore certain columns?
- Ashish_Mathur4 years agoSuper User
So that will not happen by removing the row. That will happen within the DAX formula. You will have to clarify what exactly do you want to calculate.
- MFelix4 years agoSuper User
Hi zaraanderson ,
This happens because you have made the split to rows so the other columns get the values repeated, in this case you need to use a MIN or similar on the other responses where you don't want the repeat values.
Other options, can be to create a dimension table with the ID of the answer and the most important information of the answer, like date created completion time and those type of things, then remove create an index for each group of question and the clean the columns you don't need and just keep the values for the 1st row of each response.
If you don't want to have the duplicates another option can be to treat the column where you have the several answers (the original question you did) and make a disconnected table and make a measure that find if the answer is within you column then you can do your visualization.
Can you share a small sample please.
- zaraanderson4 years agoFrequent Visitor
Hi MFelix - thanks for your reply again, really appreciate your time. I can't share a sample of the actual file, but I have made a dummy file that replicates the characteristics. Link to excel file and PBI file
So basically, I have a few multiple response questions (eg. pet type, favourite foods) and if I split all those by delimiter then my file will eventually have hundreds of duplicates. For the multiple responses, I want to split them and count them individually (eg. view how many people have dogs, how many people have birds, how many people have cats) and have no interest in the combination of pets that people have. However, I need to keep the data connected to its original response so that I can use the other single response question data points as filters/slicers (eg. if we just look at 20-29 year olds, what is the dispersion of pet type?)
Hopefully this makes sense? Again I really appreciate you taking such a close look at this.
Kind regards,
Zara
- MFelix4 years agoSuper User
Hi zaraanderson ,
In this case you need to take a different approach, keeping the responses has you have you can create disconnected tables with the answrs from the multioption. In this case I have created 2 tables:
Now using this I have created the following two measures:
Pet Count = // Character that split phrase into words VAR SplitByCharacter = ";" // Temporary table that splits selected phrase into words VAR Words_table = ADDCOLUMNS ( GENERATE ( SELECTCOLUMNS ( SUMMARIZE ( ALLSELECTED ( 'Sheet1 (2)' ), 'Sheet1 (2)'[Respondent ID], 'Sheet1 (2)'[Pet type (select all that apply)] ), "Find_Text", 'Sheet1 (2)'[Pet type (select all that apply)] ), VAR TokenCount = PATHLENGTH ( SUBSTITUTE ( [Find_Text], SplitByCharacter, "|" ) ) RETURN GENERATESERIES ( 1, TokenCount ) ), "Word", PATHITEM ( SUBSTITUTE ( [Find_Text], SplitByCharacter, "|" ), [Value] ) ) RETURN COUNTROWS ( FILTER ( Words_table, [Word] IN VALUES ( Pets[Pet type] ) ) ) Food Count = // Character that split phrase into words VAR SplitByCharacter = ";" // Temporary table that splits selected phrase into words VAR Words_table = ADDCOLUMNS ( GENERATE ( SELECTCOLUMNS ( SUMMARIZE ( ALLSELECTED ( 'Sheet1 (2)' ), 'Sheet1 (2)'[Respondent ID], 'Sheet1 (2)'[Favourite foods (select all that apply)] ), "Find_Text", 'Sheet1 (2)'[Favourite foods (select all that apply)] ), VAR TokenCount = PATHLENGTH ( SUBSTITUTE ( [Find_Text], SplitByCharacter, "|" ) ) RETURN GENERATESERIES ( 1, TokenCount ) ), "Word", PATHITEM ( SUBSTITUTE ( [Find_Text], SplitByCharacter, "|" ), [Value] ) ) RETURN COUNTROWS ( FILTER ( Words_table, [Word] IN VALUES ( Foods[Favourite foods] ) ) )Has you can see now you can use these two measures on your calculation:
PBIX attach.
- zaraanderson4 years agoFrequent Visitor
Hey MFelix!
This solution is working really well, but I just have a small question. Because I use branching on the form that generates the data, some of the data points are blank. So when I go to display the new "count" measures that were generated from your fantastic DAX stuff, I get "the arguments in GenerateSeries function cannot be blank".
I've done some investigating and have already found a solution, but I just don't know how to apply it to the DAX stuff you wrote. Apparently this will work:
But I'm not sure how to write this into your DAX. Could you please show me on the pet count example? I hope this will be my last problem!
- MFelix4 years agoSuper User
HI zaraanderson ,
Are you refering that sometimes you don't have values for the responses?
In this case try to redo your measure to:
Pet Count = // Character that split phrase into words VAR SplitByCharacter = ";" // Temporary table that splits selected phrase into words VAR Words_table = ADDCOLUMNS ( GENERATE ( SELECTCOLUMNS ( FILTER ( SUMMARIZE ( ALLSELECTED ( 'Sheet1 (2)' ), 'Sheet1 (2)'[Respondent ID], 'Sheet1 (2)'[Pet type (select all that apply)] ), 'Sheet1 (2)'[Pet type (select all that apply)] <> BLANK () ), "Find_Text", 'Sheet1 (2)'[Pet type (select all that apply)] ), VAR TokenCount = PATHLENGTH ( SUBSTITUTE ( [Find_Text], SplitByCharacter, "|" ) ) RETURN GENERATESERIES ( 1, TokenCount ) ), "Word", PATHITEM ( SUBSTITUTE ( [Find_Text], SplitByCharacter, "|" ), [Value] ) ) RETURN COUNTROWS ( FILTER ( Words_table, [Word] IN VALUES ( Pets[Pet type] ) ) )