Informe encuestas. Organización columnas

Hola Daniel,

Soy Eduardo, del curso de Power Bi que impartiste en la Universidad San Pablo CEU el pasado verano. Tengo algunas dudas de cómo hacer un informe de resultados de encuestas. Cada pregunta tiene como posibles respuestas cuatro categorías, Totalmente en desacuerdo, Algo en desacuerdo, Algo de acuerdo y Totalmente de acuerdo.

- Cuando creo un column chart para una pregunta (Campo), pongo como valor el campo con las respuestas, ¿qué tendría que hacer para que haga un conteo de las categorías y me las ponga en el eje en el orden establecido? (Totalmente en desacuerdo, Algo en desacuerdo, Algo de acuerdo y Totalmente de acuerdo). Si pongo en el eje el mismo campo, ya me hace el conteo, pero me lo ordena alfabéticamente. He creado una tabla con las categorías, he incluido una columna de orden y he forzado a que las categorías se ordenen, pero no se como enlazarlo con los campos (columnas) de respuestas.

- ¿Como puedo hacer para asignar a cada categoría un valor numérico para que haga cálculos de medias y desviaciones?¿Habría que hacer una medida para cada pregunta?

Disculpa la extensión de la consulta y muchas gracias por tu atención.

Saludos.

E.

Hola Eduardo,

me alegro de verte por aquí. Vamos con tu consulta. En primer lugar necesitaría confirmar la "forma" de tus datos. Imagino que tienes una tabla para cada encuesta, y que en cada tabla, tienes en una columna las respuestas recibidas, algo como:

Tabla de datos

¿es así?

En caso positivo, imagino que estás creando tu gráfico de columnas llevando el campo "Respuesta" tanto al campo "Eje" como al campo "Valor" (en el campo "Eje" para que se desagreguen tus datos y al campo "Valor" para que se cuenten -por defecto verás que se aplica la función de agregación "Recuento"):

Gráfica de columnas

Me preguntas cómo ordenar los valores según un criterio. Para ello necesitas una tabla en la que aparezcan los textos a ordenar y un número que indique la posición de cada texto. Algo como:

Orden

Y aquí tienes varias opciones: lo más simple es, desde el editor de consultas, hacer una combinación de tu tabla original de respuestas y ésta, para añadir el numerito en cuestión al lado de cada respuesta:

Datos con orden

Hay opciones ligeramente más sofisticadas, como agregar la columna mediante una función DAX (tienes aquí un escenario de este tipo), pero el resultado será el mismo. Y ahora ya puedes ordenar la columna "Respuesta" con respecto a "Orden".

Sobre tu última pregunta, si te entiendo bien, podrías hacer esto mismo: asignar en otra tabla esos valores a cada categoría y "traer" dichos valores a la tabla principal por el método explicado.

Dime si hasta aquí vamos bien...

Un abrazo

Daniel

Hola Daniel,

Muchas gracias por contestar tan rápido!

Efectivamente, la salida de datos de la plataforma de encuestas es como indicas (Con esas opciones u otras tipo Sí/No), pero no tengo una sola pregunta, claro, tengo muchas. En el caso de una sola pregunta lo había hecho relacionando la tabla  de categorías de respuesta, ordenando las categorías por el nº de orden (Columnas B y A de tu ejemplo) con la tabla de respuestas, pero claro, solo me valía para una pregunta, la del campo que asignaba en la relación, el resto ya no eran relacionables.

Entiendo la solución que me das, pero entonces tengo alguna duda más, tendría que generar tantas columnas de orden y valoración como preguntas tiene la encuesta, ¿no? ¿No se puede automatizar de alguna manera el proceso? En algunas encuestas tengo más de 30 preguntas y el objetivo es cargar la salida de la plataforma de encuestas directamente en power BI para que actualice los informes con nuevos datos sin necesidad de tener que hacer muchas transformaciones sobre ellos.

Espero no darte mucho la lata.

Muchas gracias de nuevo por tu atención.

Abrazo.

E.

Hola Eduardo,

Antes de responder a tu preguntas, déjame que te comente que casi siempre hay un montón de formas de hacer las cosas (y automatizando el proceso desde Power BI). Dices que en muchos de tus informes tienes más de una pregunta, aunque no me queda claro si están todas en la misma tabla o no. Así que he supuesto que sí, que tienes algo como lo siguiente:

Tabla de datos

Si es así (o semejante), para empezar puedes crear una "tabla calculada" (con DAX) agregada según los campos "Pregunta" y "Respuesta", y que cuente el número de estas últimas (para cada combinación de pregunta y respuesta). Por ejemplo:

resumen = 
    SUMMARIZE(
        resultados;
        resultados[Pregunta];
        resultados[Respuesta];
        "N"; COUNT(resultados[Respuesta])
    )

Tabla agregada

Y basarte en esta tabla para crear tus gráficas extrayendo los datos de la pregunta que te interese.

Sobre el tema del orden de las respuestas... depende de demasiados factores. Por ejemplo, imagina que una respuesta en concreto siempre aparece en el mismo orden dentro de su grupo de opciones (es decir, imagina que "Algo de acuerdo" siempre aparece después que "Totalmente de acuerdo", y que "Sí" siempre aparece antes que "No). Pues podrías tener una única tabla con todas las respuestas y un número que indique el orden, tipo:

Respuestas

Y coger esta tablita y combinarla con la tabla agregada de antes para que a cada respuesta se le asocie su orden. Al final, si una pregunta tiene como posibles respuestas "Sí" y "No" da igual que el orden de éstas sea 1 y 2 que 5 y 6, lo importante es que se muestren en el orden correcto.

Es decir, con una columna de orden te llegaría.

Ahora bien, si hay respuestas que puedan aparecer en ordenes diferentes en función de la pregunta... sería más complicado. O si no conoces de antemano las posibles respuestas (es decir, si éstas pueden ser etiquetas que no hayan aparecido nunca antes)... habría que conocerlas para darles el orden correcto con antelación.

Déjame que te comente una cosa adicional que puede resultarte de utilidad: la función DISTINCT te extrae los valores distintos de una columna o de una tabla. Por ejemplo, puedo crear una tabla (intermedia, que pueda usar posteriormente) con las preguntas de una tabla con el siguiente código DAX:

preguntas = DISTINCT(resultados[Pregunta])

DISTINCT

O usar esta misma estrategia para extraer las respuestas distintas para una pregunta dada...

Dime si seguimos bien por aquí :)

Hola Daniel,

De nuevo muchísimas gracias por tu rápida respuesta. Te cuento como salen los datos de la plataforma de encuestas, están en una sola tabla:

Nº registro Pr 1 ¿Te gusta el color azul? Pr 2 ¿Te gusta conducir? Pr 3 ¿1+1=3? Pr 4 ¿Usas tte publico? Marca coche
1 Algo de acuerdo Totalmente en desacuerdo Siempre MINI
2 Totalmente de acuerdo Algo en desacuerdo No A veces BMW
3 Totalmente en desacuerdo Totalmente en desacuerdo NS/NC Nunca AUDI
4 Totalmente de acuerdo Totalmente en desacuerdo No NS/NC BMW
5 Algo en desacuerdo Totalmente de acuerdo A veces MINI
6 Totalmente de acuerdo Totalmente de acuerdo Nunca MINI
7 Algo en desacuerdo Totalmente de acuerdo Siempre AUDI
8 Totalmente en desacuerdo Algo de acuerdo Nunca AUDI
9 Algo en desacuerdo Totalmente en desacuerdo No A veces BMW
10 Totalmente de acuerdo Algo de acuerdo No Nunca MINI
11 Totalmente en desacuerdo Algo de acuerdo NS/NC Nunca AUDI
12 Totalmente en desacuerdo Totalmente de acuerdo Nunca AUDI
13 Algo en desacuerdo Algo de acuerdo No Nunca BMW
14 Algo en desacuerdo Algo en desacuerdo Siempre BMW
15 Algo en desacuerdo Totalmente en desacuerdo Nunca AUDI
16 Algo en desacuerdo Algo de acuerdo Nunca MINI
17 Totalmente de acuerdo Totalmente de acuerdo Nunca AUDI
18 Algo en desacuerdo Algo de acuerdo NS/NC Siempre AUDI
19 Algo en desacuerdo Algo de acuerdo No Nunca MINI
20 Totalmente en desacuerdo Totalmente de acuerdo Nunca MINI
21 Algo en desacuerdo Totalmente de acuerdo Nunca AUDI
22 Algo en desacuerdo Algo de acuerdo Nunca BMW
23 Totalmente en desacuerdo Algo de acuerdo No Nunca AUDI
24 Totalmente de acuerdo Totalmente de acuerdo NS/NC A veces BMW

Como ves, cada fila es un registro de respuesta correspondiente a un encuestado y cada columna una pregunta o característica del encuestado, en cada celda está la respuesta o categoría de un encuestado "n" a la pregunta o característica "m".

Efectivamente, podría montar la tabla como me dices con fórmulas DAX, tendría suma(n x m x nº categorías del campo m) filas y "perdería" el registro en fila de cada encuestado "n" (sus respuestas estarían en las filas n(a+1), donde a=0, 1, ....m).

También podría hacer la tabla de orden que me propones, efectivamente, siempre voy a ordenar de la misma forma. En el caso del diagrama, pondría en Eje la variable "Respuesta" y en Valores la variable "Pregunta" filtrada por la pregunta que quisiera representar y ordenar por la variable "Orden" ¿no?

El problema que tendría en este caso es que me haría un acumulado global de cada una de las respuestas para cada una de las preguntas, pero yo necesito agruparlas por uno de los campos, por ejempo por marca de coche. En el caso de tener  la tabla final de las tres columnas no lo podría hacer.

Otra opción que se me ha ocurrido es más "pedestre", cambiar las categorías a:

- A.- Totalmente en desacuerdo
- B.- Algo en desacuerdo
- C.- Algo de acuerdo
- D.- Totalmente de acuerdo

- 1.- No
- 2.- Sí
- 3.- NS/NC

- A.- Nunca
- B.- A veces
- C.- Siempre
- D.- NS/NC

No es muy elegante... pero simplifica el problema...

A ver que se te ocurre.

Abrazo y gracias de nuevo...

E.

Hola de nuevo Daniel,

Si para cada pregunta "campo columna" correspondiente a una pregunta calculo dos columnas, "orden pregunta m" y "puntuación pregunta m", a través de fórmulas DAX (Creo las tablas correspondientes de orden para cada pregunta y sus categorías y la puntuación correspondiente, sería el equivalente a un buscav en excel) ya tendría el problema resuelto, ordenando los gráficos de barras de cada "campo columna" por el campo "orden pregunta m" y calculando sobre el campo "puntuación pregunta m". Lo que no se es como se podría hacer de forma que no fuera "campo columna" a "campo columna" y que se pudiese automatizar a partir de la salida de datos de la plataforma de encuestas.

Muchas gracias por tu atención ;D

E

ok, a ver qué te parece lo siguiente: leo tu tabla, que originalmente tendrá un aspecto como el siguiente (vista desde el editor de consultas):

Tabla

Ahora voy a "despivotarla". Para ello hago clic con el botón derecho del ratón en la cabecera del campo "Id" (el que está en naranja) y selecciono "Anulación de pivotización de otras columnas" (de las otras que no he seleccionado). El resultado es el siguiente (muestro solo los primeros registros):

Tabla despivotada

Ahora tenemos todas las preguntas en la columna "Atributo" y las respuestas en "Valor". Fíjate que si una pregunta tenía 20 respuestas, ahora hay 20 líneas para dicha pregunta (es decir, no se pierde nada, solo se agrupa todo en dos columnas). Por comodidad, renombro las columnas a "Pregunta" y "Respuesta":

Tabla despivotada

Aplico cambios y voy al editor de informes.

Ahora puedo hacer lo siguiente (por ponerte un ejemplo de lo que podría hacer): puedo arrastrar el campo "Pregunta" al lienzo y convertirlo en una segmentación (que me permita escoger qué pregunta quiero analizar). Y puedo llevar el campo "Respuesta" a una matriz a la que llevo dicho campo dos veces: una a "Filas" y otra a "Valores", configurando esta última instancia para que se calcule el recuento. Es decir, si no selecciono nada, mi informe tiene este aspecto:

Informe sin seleccionar nada

Veo todas las preguntas y todas las respuestas. Pero en cuanto selecciono una pregunta, veré solo sus respuestas y el número de ellas:

Informe tras selección

O, seleccionando otra:

Informe tras selección

...que creo que se parece más a lo que buscas. Yo estoy mostrando el recuento de cada opción, pero ahí podría calcular cualquier otro valor (porcentaje respecto del total, etc.).

Un saludo!

Daniel

Hola Daniel,

Muchas gracias de nuevo por tus comentarios. He estado viendo la posibilidad que me apuntas de hacer un despivote de la tabla original y un merge con el orden y la puntuación de las categorías y no lo veo clero, ya que tengo luego que sacar resultados por uno de los campos, por ejemplo MARCA y así no se podría hacer.

El objetivo que busco es hacer este tipo de análisis:

ELR_PowerBI_01

Como ves, necesito gráficos de barras con los conteos de cada pregunta en sus respectivas categoría estableciendo previamente un filtro (Slicer), pero me encuentro con los dos problemas que te dije:

- No puedo (No sé...) ordenar las categorías con un orden personalizado (No, Sí, NS/NC; Totalmente en desacuerdo, Algo en desacuerdo, Algo de acuerdo y Totalmente de acuerdo; Nunca, A veces, Siempre y NS/NC)

- En el caso en el que en alguna de las preguntas falte una de las categorías, no me la incluye en el gráfico. (Necesito que siempre aparezcan en el eje X TODAS las categorías, si no hay datos, valor =0)

En excel es un problema de fácil solución con formulas contar.si.conjunto

2

A ver si se te ocurre alguna otra forma...

Muchas gracias de nuevo.

Abrazo.

E.

Hola Eduardo,

lo del orden, sigo pensando que lo de aplicar un numerito a todas las posibles respuestas en una única lista te podría servir (no sé si llegaste a probarlo).

Lo del cero, depende de dónde salgan los números. Por ejemplo, si parto de una tabla que contiene ceros, se muestran en la gráfica:

Tabla con ceros

Si son valores "calculados", es posible que para una cierta categoría no haya ningún elemento, en ese caso queda representando por un "BLANK" y, efectivamente, no se muestra. En un caso así puedes crear una medida que haga el cálculo que te interese pero compruebe si devuelve un BLANK y, en caso positivo, que devuelva un 0, algo como:

Número = IF(
    CALCULATE(COUNT(Customers[Customer Id])) = BLANK();
    0;
    CALCULATE(COUNT(Customers[Customer Id]))
)

Es difícil darte muchas más pistas. En la mayor parte de las veces, la solución adecuada depende mucho de cómo se estén configurando las gráficas, de la estructura de los datos, de cómo se hagan los cálculos...

Un abrazo

Daniel

Hola Daniel,

Muchas gracias por los consejos, al final las tres soluciones que barajo son:

- Tabla calculada previa (Ultima opción que me propones)

- Anteceder a las categorías con un clasificador en el propio texto de la categoría

- Imponer una columna de orden en cada pregunta

Voy a trabajar con las tres soluciones a ver cual de ellas me resulta más fácil de implementar y te cuento.

Seguimos en contacto.

Un abrazo y gracias de nuevo.

E.

ok, pues ya me contarás :)

Estos días estoy de viaje (por trabajo), sin mucho tiempo, pero revisaré el foro de vez en cuando por si puedo ayudarte con alguna cosa puntual...

Gracias a ti

Daniel

Enviado por Eduardo López … el Lun, 24/02/2020 - 13:55