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