traducir código SQL para recuento único en código único de Power BI Code

Un usuario Pregunto ✅

12Bowers12

Buenos días a todos,

Tengo datos de Power BI llamados PolicyData que se importan del conjunto de datos SQL PoicyData. El departamento de TI me dio el código SQL para obtener un recuento único como se muestra a continuación.
Intenté días escribir una Medida con columna calculada y DAX anterior para intentar obtener el recuento, pero fallé.

Agradezco su ayuda para «traducir» este código SQL en una medida de Power BI.

dennis

seleccionar recuento (reclamante distinto)

de PolicyData f1

donde

Account_Date >= ‘2019-01-01’ y

El reclamante no está

(seleccione Reclamante de PolicyData donde

Account_Date >= ‘2019-01-01’ y Record_Type=»P») y

Demandante en

(seleccione Demandante

de PolicyData

donde Fecha_cuenta < '2019-05-01'

grupo por reclamante que tiene suma (cantidad) = 0

) ;

12Bowers12

En respuesta a PattemManohar

Hola Pattem,

Agregué un criterio más [TRASN_TYPE] = «INDEM» y probé todas las situaciones pero NO cambió en diferentes columnas de filtrado, pero aún así obtuvo el número que es más alto que el resultado de SQL (el recuento único es 923). El número más bajo basado en su código es 1619.

Tuve la oportunidad, ¿podrías echar un vistazo?

Aprecio tu ayuda.

dennis

L16 CWOP DistinctCount =

Exclusión VAR =

SELECCIONAR COLUMNAS (

FILTRO (

archivo perdido,

LossFile[RECORD_TYPE] = «P»

&& LossFile[TRANS_TYPE] = «INDEM»

&& LossFile[ACCOUNT_DATE] >= FECHA (2019, 1, 1)

),

«RECLAMANTE», LossFile[CLAIMANT]

)

VAR Inclusión =

SELECCIONAR COLUMNAS (

FILTRO (

RESUMEN (

FILTRO (

archivo perdido,

LossFile[TRANS_TYPE] = «INDEM»

&& LossFile[ACCOUNT_DATE] < FECHA ( 2019, 5, 1 )

),

LossFile[CLAIMANT],

«Total», SUMA ( LossFile[AMOUNT] )

),

[Total] = 0

),

«RECLAMANTE», LossFile[CLAIMANT]

)

REGRESO

CALCULAR (

DISTINCTCOUNT ( LossFile[CLAIMANT] ),

FILTRO (

archivo perdido,

(LossFile[CLAIMANT]) EN Exclusión

&& NOT(ArchivoPerdido[CLAIMANT]) EN Inclusión

)

)

PattemManohar

@ 12Bowers12 Siempre se recomienda publicar datos de prueba de muestra y el resultado esperado para una solución precisa. Intente esto… que no está probado (sin ningún dato de muestra)

DistinctCount = 

VAR _Exclusion = SELECTCOLUMNS(FILTER(PolicyData,Account_Date >= "2019-01-01" & Record_Type = "P"),"Claimant",[Claimant])
VAR _Inclusion = SELECTCOLUMNS(FILTER(SUMMARIZE(FILTER(PolicyData,Account_Date < "2019-05-01"),Claimant,"Total",SUM(Amount)),[Total]>0),"Claimant",[Claimant])

RETURN CALCULATE(DISTINCTCOUNT(Claimant),FILTER(PolicyData,Claimant NOT IN _Exclusion & Claimant IN _Inclusion))

12Bowers12

En respuesta a PattemManohar

Hola Pattem,

Agregué un criterio más [TRASN_TYPE] = «INDEM» y probé todas las situaciones pero NO cambió en diferentes columnas de filtrado, pero aún así obtuvo el número que es más alto que el resultado de SQL (el recuento único es 923). El número más bajo basado en su código es 1619.

Tuve la oportunidad, ¿podrías echar un vistazo?

Aprecio tu ayuda.

dennis

L16 CWOP DistinctCount =

Exclusión VAR =

SELECCIONAR COLUMNAS (

FILTRO (

archivo perdido,

LossFile[RECORD_TYPE] = «P»

&& LossFile[TRANS_TYPE] = «INDEM»

&& LossFile[ACCOUNT_DATE] >= FECHA (2019, 1, 1)

),

«RECLAMANTE», LossFile[CLAIMANT]

)

VAR Inclusión =

SELECCIONAR COLUMNAS (

FILTRO (

RESUMEN (

FILTRO (

archivo perdido,

LossFile[TRANS_TYPE] = «INDEM»

&& LossFile[ACCOUNT_DATE] < FECHA ( 2019, 5, 1 )

),

LossFile[CLAIMANT],

«Total», SUMA ( LossFile[AMOUNT] )

),

[Total] = 0

),

«RECLAMANTE», LossFile[CLAIMANT]

)

REGRESO

CALCULAR (

DISTINCTCOUNT ( LossFile[CLAIMANT] ),

FILTRO (

archivo perdido,

(LossFile[CLAIMANT]) EN Exclusión

&& NOT(ArchivoPerdido[CLAIMANT]) EN Inclusión

)

)

12Bowers12

En respuesta a 12Bowers12

Hola, Pattem, acabo de hacer coincidir el número correcto con SQL al agregar una variable más. Gracias. Probaré el código de Doobie más tarde.

Que tenga un buen día.

dennis

L16 CWOP DistinctCount =

Base VAR =

SELECCIONAR COLUMNAS (

FILTRO (

archivo perdido,

LossFile[TRANS_TYPE] = «INDEM»

&& LossFile[ACCOUNT_DATE] >= FECHA (2019, 1, 1)

),

«RECLAMANTE», LossFile[CLAIMANT]

)

Exclusión VAR =

SELECCIONAR COLUMNAS (

FILTRO (

archivo perdido,

LossFile[RECORD_TYPE] = «P»

&& LossFile[TRANS_TYPE] = «INDEM»

&& LossFile[ACCOUNT_DATE] >= FECHA (2019, 1, 1)

),

«RECLAMANTE», LossFile[CLAIMANT]

)

VAR Inclusión =

SELECCIONAR COLUMNAS (

FILTRO (

RESUMEN (

FILTRO (

archivo perdido,

LossFile[TRANS_TYPE] = «INDEM»

&& LossFile[ACCOUNT_DATE] < FECHA ( 2019, 5, 1 )

),

LossFile[CLAIMANT],

«Total», SUMA ( LossFile[AMOUNT] )

),

[Total] = 0

),

«RECLAMANTE», LossFile[CLAIMANT]

)

REGRESO

CALCULAR (

DISTINCTCOUNT ( LossFile[CLAIMANT] ),

FILTRO (

archivo perdido,

LossFile[CLAIMANT] En base

&& NO (archivo perdido[CLAIMANT] ) EN Exclusión

&& LossFile[CLAIMANT] EN Inclusión

)

)

12Bowers12

En respuesta a 12Bowers12

Lo siento, Pattem y Doobie, estoy de vuelta para hacer más preguntas:

Obtuve el número total exacto como resultado de SQL (923). Sin embargo, cuando traté de crear un informe de Power BI por año de accidente, el total sigue siendo 923, el resumen de cada año de accidente (probé en Excel) siempre es menor que el total 923. Intenté usar otros criterios para filtrar el contar pero obtener un número más bajo pero diferente.

¿Algunas ideas?

Aprecio tu ayuda.

dennis

Anónimo

En respuesta a 12Bowers12

Es probable que sea un problema de relación de datos. ¿Puedes tomar una captura de pantalla de tu modelo de datos?

12Bowers12

En respuesta a Anónimo

Lo siento, Doobie,

Intenté adjuntar una captura de pantalla aquí pero no pude obtener eso.

La relación es muy sencilla:

Accident Year está en un lado LossClaim, el lado de muchos es LossFile que aloja la medida. LossClaim y LossFile están relacionados a través de ClaimNumber. También intenté crear un informe utilizando la columna LossFile, pero obtuve un resultado diferente.

Atentamente,

dennis

12Bowers12

En respuesta a 12Bowers12

Buenas tardes, Doobie.

Pegué una muestra de datos aquí para usted.

Aprecio tu ayuda.

dennis

AFIRMAR DEMANDANTE COBERTURA TRANS_TIPO TIPO_REGISTRO MONTO CUENTA_FECHA
138272 000138272-001 PEPITA INDEM PAGS -1480 29/04/2019
138272 000138272-001 PEPITA INDEM PAGS 1480 29/04/2019
138272 000138272-001 PEPITA INDEM PAGS -1480 29/04/2019
138272 000138272-001 PEPITA INDEM C 1480 29/04/2019
182677 000182677-003 PEPITA INDEM PAGS -10404 29/03/2019
182677 000182677-003 PEPITA INDEM C 10404 29/03/2019
194602 000194602-005 BI INDEM PAGS -1000 21/02/2019
194602 000194602-005 BI INDEM C 1000 21/02/2019
199016 000199016-001 PEPITA INDEM PAGS -698.13 26/01/2019
199016 000199016-001 PEPITA INDEM PAGS 698.13 17/01/2019
200509 000200509-001 PEPITA INDEM PAGS -443.45 11/01/2019
200509 000200509-001 PEPITA INDEM C 443.45 11/01/2019
200646 000200646-001 PEPITA INDEM PAGS -4500 4/4/2019
200646 000200646-001 PEPITA INDEM PAGS -996.34 4/4/2019
200646 000200646-001 PEPITA INDEM C 4500 4/4/2019
200646 000200646-001 PEPITA INDEM C 996.34 4/4/2019
201129 000201129-002 PEPITA INDEM PAGS 840 17/01/2019
202194 000202194-001 BI INDEM PAGS -2500 1/9/2019
202194 000202194-001 BI INDEM C 2500 1/9/2019
204366 000204366-001 PEPITA INDEM PAGS -525 24/01/2019
204366 000204366-001 PEPITA INDEM PAGS 525 17/01/2019

12Bowers12

En respuesta a PattemManohar

Gracias, Pattem, también estoy probando tu solución. Pegaré datos la próxima vez. dennis

Anónimo

Sin mirar sus datos, es un poco complicado descifrar esto.

¿Cuál es el objetivo final del código, para obtener un recuento distinto de los elementos de política que caen en una categoría específica? Si es así, ¿es la categoría que Account_Date >= ‘2019-01-01’ y Record_Type=»P» (qué representa ‘P’ y si está almacenado en la misma tabla que los otros datos de la cuenta) o Account_Date < '2019 -05-01'?

12Bowers12

En respuesta a Anónimo

Gracias,

1. Sí, el objetivo es obtener un recuento distinto de los artículos de reclamo que se incluyen en estas categorías:

Primero, Account_Date >= ‘2019-01-01’

En segundo lugar, el Reclamante no está (seleccione Reclamante de PolicyData donde Account_Date >= ‘2019-01-01’ and Record_Type=»P»)

En tercer lugar, Reclamante en (seleccione Reclamante de PolicyData donde Account_Date < '2019-05-01' grupo por Reclamante que tiene sum(Cantidad) = 0);

2. Todas las categorías, incluidas Account_Date, Record_Type, se almacenan en la misma tabla PolicyData.

3. Bajo Record_Type, hay tres tipos: P, C y O. P significa Pago.

Anónimo

En respuesta a 12Bowers12

Entendido. Así que creo que lo siguiente podría funcionar. Primero, crearía una columna calculada con sus criterios para calcular los distintos valores, ya que incluirlo todo en una medida puede ser complicado con varios filtros. A continuación se muestra una columna calculada que creo que resume con precisión el código SQL.

Column = 
SWITCH(TRUE(), 
    AccountDate >= "2019-01-01", "True",
    PolicyAccountDate >= "2019-01-01" && RecordType = "P", "False",
    PolicyAccountDate < "2019-05-01" && Amount = "0", "True"
)

A partir de ahí, puede crear una medida para contar el número de valores «Verdaderos».

Measure = 
VAR Column = Sheet1'Column'
Return

CALCULATE(
    DISTINCTCOUNT(Sheet1[Column]),
        FILTER(Column, "True")
)

Incluso podría evitar la medida y colocar la columna calculada en un elemento visual y filtro de ‘Tarjeta’ que se ajuste a sus necesidades.

¡Espero que esto ayude!

12Bowers12

En respuesta a Anónimo

Gracias, Doobie,

Agregué un criterio más [Trans_Type]=”INDEM”, y creó una columna calculada [C7 CWOP] basado en su código. Según esta columna calculada, copié su medida como [L16 CWOP Count].

Pero el recuento es mucho mayor. El conteo basado en SQL es 923, pero [L16 CWOP Count] muestra como 12,130.

Tuviste tiempo, ¿podrías echar un vistazo?

Aprecio tu ayuda.

dennis

C7 CWOP =

CAMBIAR(VERDADERO(),

LossFile[ACCOUNT_DATE] >= Fecha(2019,1,1) && Archivo Perdido[TRANS_TYPE] = «INDEM», «Verdadero»,

LossFile[ACCOUNT_DATE] >= Fecha(2019,1,1) && Archivo Perdido[TRANS_TYPE] = «INDEM» && LossFile[RECORD_TYPE] = «P», «Falso»,

LossFile[ACCOUNT_DATE] < Fecha (2019,5,1) && LossFile[TRANS_TYPE] = "INDEM" && LossFile[AMOUNT] = 0, "Verdadero"

)

L16 Recuento de CWOP =

CALCULAR(

DISTINCTCOUNT(LossFile[CLAIMANT]),

LossFile[C7 CWOP]=»Verdadero»

)

12Bowers12

En respuesta a Anónimo

Gracias, Doobie,

Estoy probando ahora. hacerle saber más tarde.

Aprecio tu ayuda.

dennis

Deja un comentario

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