GROUP BY posteriores en Power BI

Un usuario Pregunto ✅

becky conning

Estoy tratando de averiguar qué herramientas de análisis pedirle a mi equipo que use.

Como una tarea de ejemplo, estoy tratando de averiguar a partir de un conjunto de datos de la FDA qué efectos pueden tener las diferentes combinaciones de medicamentos.

En SQL, escribiría lo siguiente, pero quiero una herramienta para que mi equipo no necesite escribir SQL.

SELECT combinations.Drugs, combinations."Reaction", COUNT(*) FROM 
(SELECT STRING_AGG(DISTINCT("Active substance"),', ') AS "Drugs", "Report id", "Reaction" FROM "Adverse_reactions" WHERE "Active substance" IS NOT NULL GROUP BY "Report id", "Reaction") as combinations 
GROUP BY "Drugs", "Reaction";

Puedo hacer la subconsulta y, si ya la hice antes de que llegue a Power BI, entonces puedo hacer la consulta externa, pero parece que no puedo hacer ambas cosas.

Aquí hay una muestra del conjunto de datos:

https://reform-fda.s3.amazonaws.com/Adverse+reactions.csv

Y aquí están los resultados esperados de esa muestra:

Drugs,Reaction,count
AMBRISENTAN,Dyspnoea exertional,1
AMBRISENTAN,Hepatic enzyme increased,1
AMBRISENTAN,Ocular hyperaemia,1
"ALPRAZOLAM, AMBRISENTAN, ASPIRIN, ESOMEPRAZOLE MAGNESIUM, FLUTICASONE PROPIONATESALMETEROL XINAFOATE, METOPROLOL, PREGABALIN, SIMVASTATIN, TADALAFIL, TIOTROPIUM BROMIDE MONOHYDRATE, TRIAMTERENE",Back pain,1
AMBRISENTAN,Back pain,1
"AMBRISENTAN, LOSARTAN, TREPROSTINIL",Headache,1
AMBRISENTAN,Oedema,1
"ACETAMINOPHEN, AFATINIB, ALLOPURINOL, CALCIUM CARBONATE, FUROSEMIDE, IRBESARTAN, LANSOPRAZOLE, NEBIVOLOL, NORTRIPTYLINE HYDROCHLORIDE, POTASSIUM CHLORIDE, RANITIDINERANITIDINE HYDROCHLORIDE, ZOLPIDEMZOLPIDEM TARTRATE",Abdominal pain,1
"AMBRISENTAN, BOSENTAN",Oedema peripheral,1
"ACETAMINOPHEN, AFATINIB, ALLOPURINOL, CALCIUM CARBONATE, FUROSEMIDE, IRBESARTAN, LANSOPRAZOLE, NEBIVOLOL, NORTRIPTYLINE HYDROCHLORIDE, POTASSIUM CHLORIDE, RANITIDINERANITIDINE HYDROCHLORIDE, ZOLPIDEMZOLPIDEM TARTRATE",Diarrhoea,1
"ACETAMINOPHEN, AFATINIB, ALLOPURINOL, CALCIUM CARBONATE, FUROSEMIDE, IRBESARTAN, LANSOPRAZOLE, NEBIVOLOL, NORTRIPTYLINE HYDROCHLORIDE, POTASSIUM CHLORIDE, ZOLPIDEMZOLPIDEM TARTRATE",Dysuria,1
"ACETAMINOPHEN, ALLOPURINOL, DEXCHLORPHENIRAMINE MALEATE, ITRACONAZOLE, LANSOPRAZOLE, OFATUMUMAB, PREDNISOLONE, SULFAMETHOXAZOLETRIMETHOPRIM, UNSPECIFIED INGREDIENT",Adenoviral haemorrhagic cystitis,1
"ACETAMINOPHEN, AFATINIB, ALLOPURINOL, CALCIUM CARBONATE, FUROSEMIDE, IRBESARTAN, LANSOPRAZOLE, NEBIVOLOL, NORTRIPTYLINE HYDROCHLORIDE, POTASSIUM CHLORIDE, RANITIDINERANITIDINE HYDROCHLORIDE, ZOLPIDEMZOLPIDEM TARTRATE",Weight decreased,1
"AMBRISENTAN, LOSARTAN, TREPROSTINIL",Hypotension,1
"ACETAMINOPHEN, AFATINIB, ALLOPURINOL, CALCIUM CARBONATE, FUROSEMIDE, IRBESARTAN, LANSOPRAZOLE, NEBIVOLOL, NORTRIPTYLINE HYDROCHLORIDE, POTASSIUM CHLORIDE, ZOLPIDEMZOLPIDEM TARTRATE",C-reactive protein increased,1
"AMBRISENTAN, BOSENTAN",Fluid retention,1
AMBRISENTAN,Fluid retention,1
AMBRISENTAN,Jaundice,1
"AMBRISENTAN, TREPROSTINIL",Throat irritation,1
"AMBRISENTAN, TREPROSTINIL",Cough,1
AMBRISENTAN,Unevaluable event,1
AMBRISENTAN,Malaise,2
"AMBRISENTAN, OXYGEN",Rhinorrhoea,1
"ACETAMINOPHEN, AFATINIB, ALLOPURINOL, CALCIUM CARBONATE, FUROSEMIDE, IRBESARTAN, LANSOPRAZOLE, NEBIVOLOL, NORTRIPTYLINE HYDROCHLORIDE, POTASSIUM CHLORIDE, RANITIDINERANITIDINE HYDROCHLORIDE, ZOLPIDEMZOLPIDEM TARTRATE",Asthenia,1
AMBRISENTAN,Swelling,2
"ACETAMINOPHEN, AFATINIB, ALLOPURINOL, CALCIUM CARBONATE, FUROSEMIDE, IRBESARTAN, LANSOPRAZOLE, NEBIVOLOL, NORTRIPTYLINE HYDROCHLORIDE, POTASSIUM CHLORIDE, ZOLPIDEMZOLPIDEM TARTRATE",Pyrexia,1
"ACETAMINOPHEN, AFATINIB, ALLOPURINOL, CALCIUM CARBONATE, FUROSEMIDE, IRBESARTAN, LANSOPRAZOLE, NEBIVOLOL, NORTRIPTYLINE HYDROCHLORIDE, POTASSIUM CHLORIDE, ZOLPIDEMZOLPIDEM TARTRATE",Pleural effusion,1
"ACETAMINOPHEN, ALLOPURINOL, DEXCHLORPHENIRAMINE MALEATE, ITRACONAZOLE, LANSOPRAZOLE, OFATUMUMAB, PREDNISOLONE, SULFAMETHOXAZOLETRIMETHOPRIM, UNSPECIFIED INGREDIENT",Pyrexia,1
"ACETAMINOPHEN, AFATINIB, ALLOPURINOL, CALCIUM CARBONATE, FUROSEMIDE, IRBESARTAN, LANSOPRAZOLE, NEBIVOLOL, NORTRIPTYLINE HYDROCHLORIDE, POTASSIUM CHLORIDE, ZOLPIDEMZOLPIDEM TARTRATE",Blood creatinine increased,1
AMBRISENTAN,Tremor,1
AMBRISENTAN,Fatigue,1

¿Cómo hago el equivalente de este SQL en Power BI?

becky conning

En respuesta a becky conning

Yo estaba un poco confundido. Publicó un código arriba, pero eso es 414 caracteres, mientras que el SQL original tiene 299 caracteres.

Además, con cambios menores, el SQL funciona en todos los dialectos de SQL, mientras que el código que publicó parece ser específico de Power BI.

Pensé que el objetivo de herramientas como Power BI era permitir que los usuarios empresariales analizaran datos mientras escribían menos código del que sería necesario sin Power BI y que esto no concordaba.

Sin embargo, parece que Power BI cumple la mayor parte del camino en este caso.

Cuando hago clic derecho en mi tabla y hago clic en «Editar consulta»

Y hago clic derecho en un valor en blanco en la columna «Sustancia activa»

Y haga clic en «Filtros de texto»
Y haga clic en «No es igual»
Y hago clic en «Agrupar por»

Y hago clic en «Avanzado»

Y proporciono «ID de informe» como la primera agrupación
Y hago clic en «Agregar agrupación»
Y proporciono «Reacción» como la segunda agrupación.

Y proporciono «Sustancias activas» como «Nuevo nombre de columna»
Y proporciono «Min» como la «Operación»
Y proporciono «Sustancia activa» como «Columna»

Y hago clic en «Aceptar»
Y hago clic en «Ver»

Y hago clic en «Editor avanzado»
Y reemplazo `List.Min([Active substance])` con `Text.Combine(List.Distinct([Active substance]), «, «)`
Y hago clic en «Listo»

Y hago clic en «Agrupar por»

Y hago clic en «Avanzado»

Y proporciono «Sustancias activas» como primera agrupación.
Y hago clic en «Agregar agrupación»

Y proporciono «Reacción» como la segunda agrupación.
Y proporciono «Recuento» como el «Nuevo nombre de columna»
Y proporciono «Contar filas» como la «Operación»

Y hago clic en «Aceptar»

Y ordeno la tabla por «Cuenta» descendente

Y hago clic en «Inicio»
Y hago clic en «Cerrar y aplicar»
Y hago clic en «Tabla»

Y hago clic en la casilla de verificación junto a «Sustancias activas»
Y hago clic en la casilla de verificación junto a «Reacción»
Y hago clic en la casilla de verificación junto a «Contar»

Entonces veo los resultados que esperaba.

Sería bueno poder hacer `List.Distinct` y `Text.Combine` desde la interfaz de usuario en lugar del editor de código, pero claramente 53 caracteres es una mejora con respecto a 299.

becky conning

Estoy tratando de averiguar a partir de un conjunto de datos de la FDA qué efectos pueden tener las diferentes combinaciones de medicamentos.

En SQL, escribiría lo siguiente, pero no quiero que mi equipo tenga que usar SQL.

SELECT combinations.Drugs, combinations."Reaction", COUNT(*) FROM 
(SELECT STRING_AGG(DISTINCT("Active substance"),', ') AS "Drugs", "Report id", "Reaction" FROM "Adverse_reactions" WHERE "Active substance" IS NOT NULL GROUP BY "Report id", "Reaction") as combinations 
GROUP BY "Drugs", "Reaction";

En Power BI, puedo uno de los grupos, pero parece que no puedo hacer ambos.

Aquí hay una muestra del conjunto de datos: https://reform-fda.s3.amazonaws.com/Adverse+reactions.csv

Y aquí están los resultados esperados de esa muestra:

Drugs,Reaction,count
AMBRISENTAN,Dyspnoea exertional,1
AMBRISENTAN,Hepatic enzyme increased,1
AMBRISENTAN,Ocular hyperaemia,1
"ALPRAZOLAM, AMBRISENTAN, ASPIRIN, ESOMEPRAZOLE MAGNESIUM, FLUTICASONE PROPIONATESALMETEROL XINAFOATE, METOPROLOL, PREGABALIN, SIMVASTATIN, TADALAFIL, TIOTROPIUM BROMIDE MONOHYDRATE, TRIAMTERENE",Back pain,1
AMBRISENTAN,Back pain,1
"AMBRISENTAN, LOSARTAN, TREPROSTINIL",Headache,1
AMBRISENTAN,Oedema,1
"ACETAMINOPHEN, AFATINIB, ALLOPURINOL, CALCIUM CARBONATE, FUROSEMIDE, IRBESARTAN, LANSOPRAZOLE, NEBIVOLOL, NORTRIPTYLINE HYDROCHLORIDE, POTASSIUM CHLORIDE, RANITIDINERANITIDINE HYDROCHLORIDE, ZOLPIDEMZOLPIDEM TARTRATE",Abdominal pain,1
"AMBRISENTAN, BOSENTAN",Oedema peripheral,1
"ACETAMINOPHEN, AFATINIB, ALLOPURINOL, CALCIUM CARBONATE, FUROSEMIDE, IRBESARTAN, LANSOPRAZOLE, NEBIVOLOL, NORTRIPTYLINE HYDROCHLORIDE, POTASSIUM CHLORIDE, RANITIDINERANITIDINE HYDROCHLORIDE, ZOLPIDEMZOLPIDEM TARTRATE",Diarrhoea,1
"ACETAMINOPHEN, AFATINIB, ALLOPURINOL, CALCIUM CARBONATE, FUROSEMIDE, IRBESARTAN, LANSOPRAZOLE, NEBIVOLOL, NORTRIPTYLINE HYDROCHLORIDE, POTASSIUM CHLORIDE, ZOLPIDEMZOLPIDEM TARTRATE",Dysuria,1
"ACETAMINOPHEN, ALLOPURINOL, DEXCHLORPHENIRAMINE MALEATE, ITRACONAZOLE, LANSOPRAZOLE, OFATUMUMAB, PREDNISOLONE, SULFAMETHOXAZOLETRIMETHOPRIM, UNSPECIFIED INGREDIENT",Adenoviral haemorrhagic cystitis,1
"ACETAMINOPHEN, AFATINIB, ALLOPURINOL, CALCIUM CARBONATE, FUROSEMIDE, IRBESARTAN, LANSOPRAZOLE, NEBIVOLOL, NORTRIPTYLINE HYDROCHLORIDE, POTASSIUM CHLORIDE, RANITIDINERANITIDINE HYDROCHLORIDE, ZOLPIDEMZOLPIDEM TARTRATE",Weight decreased,1
"AMBRISENTAN, LOSARTAN, TREPROSTINIL",Hypotension,1
"ACETAMINOPHEN, AFATINIB, ALLOPURINOL, CALCIUM CARBONATE, FUROSEMIDE, IRBESARTAN, LANSOPRAZOLE, NEBIVOLOL, NORTRIPTYLINE HYDROCHLORIDE, POTASSIUM CHLORIDE, ZOLPIDEMZOLPIDEM TARTRATE",C-reactive protein increased,1
"AMBRISENTAN, BOSENTAN",Fluid retention,1
AMBRISENTAN,Fluid retention,1
AMBRISENTAN,Jaundice,1
"AMBRISENTAN, TREPROSTINIL",Throat irritation,1
"AMBRISENTAN, TREPROSTINIL",Cough,1
AMBRISENTAN,Unevaluable event,1
AMBRISENTAN,Malaise,2
"AMBRISENTAN, OXYGEN",Rhinorrhoea,1
"ACETAMINOPHEN, AFATINIB, ALLOPURINOL, CALCIUM CARBONATE, FUROSEMIDE, IRBESARTAN, LANSOPRAZOLE, NEBIVOLOL, NORTRIPTYLINE HYDROCHLORIDE, POTASSIUM CHLORIDE, RANITIDINERANITIDINE HYDROCHLORIDE, ZOLPIDEMZOLPIDEM TARTRATE",Asthenia,1
AMBRISENTAN,Swelling,2
"ACETAMINOPHEN, AFATINIB, ALLOPURINOL, CALCIUM CARBONATE, FUROSEMIDE, IRBESARTAN, LANSOPRAZOLE, NEBIVOLOL, NORTRIPTYLINE HYDROCHLORIDE, POTASSIUM CHLORIDE, ZOLPIDEMZOLPIDEM TARTRATE",Pyrexia,1
"ACETAMINOPHEN, AFATINIB, ALLOPURINOL, CALCIUM CARBONATE, FUROSEMIDE, IRBESARTAN, LANSOPRAZOLE, NEBIVOLOL, NORTRIPTYLINE HYDROCHLORIDE, POTASSIUM CHLORIDE, ZOLPIDEMZOLPIDEM TARTRATE",Pleural effusion,1
"ACETAMINOPHEN, ALLOPURINOL, DEXCHLORPHENIRAMINE MALEATE, ITRACONAZOLE, LANSOPRAZOLE, OFATUMUMAB, PREDNISOLONE, SULFAMETHOXAZOLETRIMETHOPRIM, UNSPECIFIED INGREDIENT",Pyrexia,1
"ACETAMINOPHEN, AFATINIB, ALLOPURINOL, CALCIUM CARBONATE, FUROSEMIDE, IRBESARTAN, LANSOPRAZOLE, NEBIVOLOL, NORTRIPTYLINE HYDROCHLORIDE, POTASSIUM CHLORIDE, ZOLPIDEMZOLPIDEM TARTRATE",Blood creatinine increased,1
AMBRISENTAN,Tremor,1
AMBRISENTAN,Fatigue,1

¿Cómo hago el equivalente de este SQL en Power BI?

Hola @beckyconning

Cuando ejecuto su consulta SQL de mi lado, muestra un error.

Para proporcionar cualquier sugerencia, necesitamos confirmar su requerimiento.

¿Podría describir su requerimiento en palabras o mostrarme la instrucción SQL correcta?

Aquí hay un ejemplo que creo en Power BI.

crear una medida

Measure =
IF (
    MAX ( [Active substance] ) <> BLANK (),
    CALCULATE (
        CONCATENATEX (
            DISTINCT ( 'Adverse+reactions'[Active substance] ),
            [Active substance],
            ",",
            [Active substance], ASC
        ),
        ALLEXCEPT (
            'Adverse+reactions',
            'Adverse+reactions'[Report id],
            'Adverse+reactions'[Reaction]
        )
    )
)

Verifique si funciona de su lado y proporcione el resultado esperado.

Atentamente
Maggie
Equipo de apoyo comunitario _ Maggie Li
Si esta publicación le ayuda, considere aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

becky conning

En respuesta a v-juanli-msft

Es una consulta de PostgreSQL.

Empezamos donde el recuento de filas representa el número de sustancias activas en cada informe * el número de reacciones en cada informe.

A continuación, agrupamos todas las filas donde la sustancia activa no es nula por informe y reacción, resumiendo las sustancias activas en una sola cadena ordenada que representa la combinación de sustancias activas en cada informe.

En este punto, el recuento de filas representa el número de reacciones en cada informe.

Luego agrupamos por combinación de sustancias activas y reacción. Esto elimina la asociación con los informes y nos permite contar la frecuencia de cada reacción a cada combinación de sustancias activas.

El recuento de filas ahora representa el número de combinaciones de sustancias activas * el número de reacciones a esas sustancias.

becky conning

En respuesta a becky conning

Yo estaba un poco confundido. Publicó un código arriba, pero eso es 414 caracteres, mientras que el SQL original tiene 299 caracteres.

Además, con cambios menores, el SQL funciona en todos los dialectos de SQL, mientras que el código que publicó parece ser específico de Power BI.

Pensé que el objetivo de herramientas como Power BI era permitir que los usuarios empresariales analizaran datos mientras escribían menos código del que sería necesario sin Power BI y que esto no concordaba.

Sin embargo, parece que Power BI cumple la mayor parte del camino en este caso.

Cuando hago clic derecho en mi tabla y hago clic en «Editar consulta»

Y hago clic derecho en un valor en blanco en la columna «Sustancia activa»

Y haga clic en «Filtros de texto»
Y haga clic en «No es igual»
Y hago clic en «Agrupar por»

Y hago clic en «Avanzado»

Y proporciono «ID de informe» como la primera agrupación
Y hago clic en «Agregar agrupación»
Y proporciono «Reacción» como la segunda agrupación.

Y proporciono «Sustancias activas» como «Nuevo nombre de columna»
Y proporciono «Min» como la «Operación»
Y proporciono «Sustancia activa» como «Columna»

Y hago clic en «Aceptar»
Y hago clic en «Ver»

Y hago clic en «Editor avanzado»
Y reemplazo `List.Min([Active substance])` con `Text.Combine(List.Distinct([Active substance]), «, «)`
Y hago clic en «Listo»

Y hago clic en «Agrupar por»

Y hago clic en «Avanzado»

Y proporciono «Sustancias activas» como primera agrupación.
Y hago clic en «Agregar agrupación»

Y proporciono «Reacción» como la segunda agrupación.
Y proporciono «Recuento» como el «Nuevo nombre de columna»
Y proporciono «Contar filas» como la «Operación»

Y hago clic en «Aceptar»

Y ordeno la tabla por «Cuenta» descendente

Y hago clic en «Inicio»
Y hago clic en «Cerrar y aplicar»
Y hago clic en «Tabla»

Y hago clic en la casilla de verificación junto a «Sustancias activas»
Y hago clic en la casilla de verificación junto a «Reacción»
Y hago clic en la casilla de verificación junto a «Contar»

Entonces veo los resultados que esperaba.

Sería bueno poder hacer `List.Distinct` y `Text.Combine` desde la interfaz de usuario en lugar del editor de código, pero claramente 53 caracteres es una mejora con respecto a 299.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *