Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
5 years ago
Solved

Declaración SQL a DAX

Hola Gurus

Estoy tratando de convertir las siguientes consultas a DAX, las consultas forman parte de un Proc almacenado. :. ¿Hay alguna manera de convertirlas en DAX equivalentes. También hay alguna manera de almacenar en tablas temporales, como las de abajo en PBI?

Gracias de antemano!

--Cargar en la tabla temporal #CURRENT_SRC

1) SELECCIONAR RPT_PRD_END_DT, MTH_CTGRY, BRWR_DSC, WAPD_NUM WAPD_DEN
INTO #CURRENT_SRC
FROM (SELECT RPT_PRD_END_DT, MTH_CTGRY, BRWR_DSC, ROUND(WAPD_NUM ,2) AS WAPD_NUM, ROUND(WAPD_DEN ,2) AS WAPD_DEN
DESDE [INDUSTRY_SUMMARY] AA
DONDE AA. RPT_PRD_END_DT entre EOMONTH('30-APR-2020',-61) y '30-APR-2020') AA

--Cargar en STEP2

2) SELECCIONAR RPT_PRD_END_DT , BRWR_DSC

, CASE WHEN SUM(WAPD_den)-0 THEN NULL ELSE SUM(WAPD_NUM)/ SUM(WAPD_den) END AS WAPD_PCT

en #STEP2 de #CURRENT_SRC donde MTH_CTGRY 'Q'

GRUPO POR RPT_PRD_END_DT, BRWR_RPT_RIC_SMY_DSC

--Compute el promedio ahora, para cada resumen desc:

3) SELECCIONE BRWR_DSC, AVG(WAPD_PCT) como WAPD_PCT

DE GRUPO #STEP2 POR BRWR_DSC

  • DataZoe's avatar
    DataZoe
    5 years ago

    @scheri Ok, pude hacer las dos segundas tablas, pero tienen que ser todas tablas DAX separadas, no en una como yo estaba tratando de hacer.

    PASO 2 ?
    COLUMNAS DE RESUMEN (
    CURRENT_SRC[RPT_PRD_END_DT],
    CURRENT_SRC[BRWR_RPT_RIC_SMY_DSC],
    FILTRO ( CURRENT_SRC, CURRENT_SRC[MTH_CTGRY] á "M" ),
    "WAPD_PCT",
    SI (
    SUM ( CURRENT_SRC[WAPD_DEN] ) a 0,
    BLANK (),
    DIVIDE ( SUM ( CURRENT_SRC[WAPD_NUM] ), SUM ( CURRENT_SRC[WAPD_DEN] ) )
    )
    )

    AVGTABLE ?
    COLUMNAS DE RESUMEN (
    STEP2[BRWR_RPT_RIC_SMY_DSC],
    "WAPD_PCT", PROMEDIO ( STEP2[WAPD_PCT] )
    )

    Y para @AllisonKennedy, puede que no sea la mejor manera de hacer el trabajo. El objetivo final que está buscando es ese promedio por BRWR_DSC de la WAPD_PCT que RPT_PRD_END_DT da. Esto se puede hacer en una sola medida (utilicé M porque no había Q en la tabla de muestras):

    Promedio de WAPD_PCT por BRWR_DSC
    AVERAGEX (
    VALUES ( CURRENT_SRC[BRWR_RPT_RIC_SMY_DSC] ),
    AVERAGEX (
    CALCULATETABLE (
    VALUES ( CURRENT_SRC[RPT_PRD_END_DT] ),
    CURRENT_SRC[MTH_CTGRY] á "M"
    ),
    DIVIDE (
    ROUND ( SUM ( CURRENT_SRC[WAPD_NUM] ), 2 ),
    ROUND ( SUM ( CURRENT_SRC[WAPD_DEN] ), 2 ),
    BLANK ()
    )
    )
    )

    Por favor, eche un vistazo al PBIX adjunto.

13 Replies

  • DataZoe's avatar
    DataZoe
    Icon for Microsoft Employee rankMicrosoft Employee

    @scheri He analizado sus consultas a través de http://poorsql.com/ (también hay un plugin para Notepad ++).

    SELECT RPT_PRD_END_DT
    	,MTH_CTGRY
    	,BRWR_DSC
    	,WAPD_NUM
    	,WAPD_DEN
    INTO #CURRENT_SRC
    FROM (
    	SELECT RPT_PRD_END_DT
    		,MTH_CTGRY
    		,BRWR_DSC
    		,ROUND(WAPD_NUM, 2) AS WAPD_NUM
    		,ROUND(WAPD_DEN, 2) AS WAPD_DEN
    	FROM [INDUSTRY_SUMMARY] AA
    	WHERE AA.RPT_PRD_END_DT BETWEEN EOMONTH('30-APR-2020', - 61)
    			AND '30-APR-2020'
    	) AA
    	
    	
    
    SELECT RPT_PRD_END_DT
    	,BRWR_DSC
    	,CASE 
    		WHEN SUM(WAPD_den) = 0
    			THEN NULL
    		ELSE SUM(WAPD_NUM) / SUM(WAPD_den)
    		END AS WAPD_PCT
    INTO #STEP2
    FROM #CURRENT_SRC
    WHERE MTH_CTGRY = 'Q'
    GROUP BY RPT_PRD_END_DT
    	,BRWR_RPT_RIC_SMY_DSC
    	--Compute the Average now, for each summary desc:
    
    
    SELECT BRWR_DSC
    	,AVG(WAPD_PCT) AS WAPD_PCT
    FROM #STEP2
    GROUP BY BRWR_DSC

    lo que lo hace un poco más legible 🙂

    Para sus preguntas sobre tablas temporales, sí, puede crear tablas con expresiones DAX mediante https://docs.microsoft.com/en-us/dax/summarize-function-dax RESUME y SUMMARIZECOLUMNS https://docs.microsoft.com/en-us/dax/summarizecolumns-function-dax para nombrar las expresiones DAX más utilizadas en https://docs.microsoft.com/en-us/dax/table-manipulation-functions-dax .

    Por ejemplo, aquí está su primera tabla:

    COLUMNAS DE RESUMEN (
    'INDUSTRY_SUMMARY'[RPT_PRD_END_DT],
    'INDUSTRY_SUMMARY'[MTH_CTGRY],
    'INDUSTRY_SUMMARY'[BRWR_DSC],
    FILTRO (
    'INDUSTRY_SUMMARY',
    FECHAS ENTRE LAS FECHAS (
    'INDUSTRY_SUMMARY'[RPT_PRD_END_DT],
    EOMONTH ( FECHA ( 2020, 4, 30 ), - 61 ),
    FECHA ( 2020, 4, 30 )
    )
    ),
    "WAPD_NUM", ROUND ( SUM ( 'INDUSTRY_SUMMARY'[WAPD_NUM] ), 2 ),
    "WAPD_DEN", ROUND ( SUM ( 'INDUSTRY_SUMMARY'[WAPD_DEN] ), 2 )
    )

    Editar: Aquí está todo, lo agregaría como una tabla DAX:

    THEDAXVERSION ?
    Fue CURRENT_SRC =
    RESumaIRCOLUMNS (
    'INDUSTRY_SumaMARY'[RPT_PRD_END_DT],
    'INDUSTRY_SUMMARY'[MTH_CTGRY],
    'INDUSTRY_SUMMARY'[BRWR_DSC],
    Filtro (
    'INDUSTRY_SUMMARY',
    FECHAS ENTRE (
    'INDUSTRY_SUMMARY'[RPT_PRD_END_DT],
    EOMONTH ( Fecha ( 2020, 4, 30 ), - 61 ),
    Fecha ( 2020, 4, 30 )
    )
    ),
    "WAPD_NUM", Redondo ( SUM ( 'INDUSTRY_SUMMARY'[WAPD_NUM] ), 2 ),
    "WAPD_DEN", Redondo ( SUM ( 'INDUSTRY_SUMMARY'[WAPD_DEN] ), 2 )
    )
    Fue Step2 =
    RESUMIRCOLUMNS (
    CURRENT_SRC[RPT_PRD_END_DT],
    CURRENT_SRC[BRWR_DSC],
    Filtro ( CURRENT_SRC, CURRENT_SRC[MTH_CTGRY] "P" ),
    "WAPD_PCT",
    Si (
    CURRENT_SRC[WAPD_DEN] 0,
    Blanco (),
    Dividir ( CURRENT_SRC[WAPD_NUM], CURRENT_SRC[WAPD_DEN] )
    )
    )
    Fue AVGTABLE =
    RESUMIRCOLUMNS ( Step2[BRWR_DSC], "WAPD_PCT", Promedio ( Step2[WAPD_PCT] ) )
    devolución
    AVGTABLE

    • Anonymous's avatar
      Anonymous
      Not applicable

      Gracias @DataZoe. Estoy recibiendo un error de sintaxis, cuando intenté la primera parte creando la tabla:. ¿Necesita una parte RETURN? (Todo el recuento ( y ).

      La sintaxis de ')' es incorrecta. (DAX(VAR current_src........

      Esta es la tabla DAX que intento crear (igual, tienen un nombre de tabla diferente):

      CURRENT_SOURCE VAR current_src
      COLUMNAS DE RESUMEN (
      'ENT_RSKRECESSION_INDUSTRY_SUMMARY'[RPT_PRD_END_DT],
      'ENT_RSKRECESSION_INDUSTRY_SUMMARY'[MTH_CTGRY],
      'ENT_RSKRECESSION_INDUSTRY_SUMMARY'[BRWR_RPT_RIC_SMY_DSC],
      FILTRO (
      'ENT_RSKRECESSION_INDUSTRY_SUMMARY',
      FECHAS ENTRE LAS FECHAS (
      'ENT_RSKRECESSION_INDUSTRY_SUMMARY'[RPT_PRD_END_DT],
      EOMONTH ( FECHA ( 2020, 4, 30 ), - 61 ),
      FECHA ( 2020, 4, 30 )
      )
      ),
      "WAPD_NUM", ROUND ( SUM ( 'ENT_RSKRECESSION_INDUSTRY_SUMMARY'[WAPD_NUM] ), 2 ),
      "WAPD_DEN", ROUND ( SUM ( 'ENT_RSKRECESSION_INDUSTRY_SUMMARY'[WAPD_DEN] ), 2 )
      )
      • DataZoe's avatar
        DataZoe
        Icon for Microsoft Employee rankMicrosoft Employee

        @scheri sí necesitaría la parte de retorno si la usa como una variable, simplemente agregando el

        DEVOLUCIONes current_src

        al final de eso debería funcionar.

  • AllisonKennedy's avatar
    AllisonKennedy
    Icon for Community Champion rankCommunity Champion
    Sugiero hacer el paso 1 en Power Query y cargar la tabla como una tabla real en el modelo de datos (tabla no temporal). A continuación, puede realizar los pasos 2 y 3 con DAX una vez que tenga la tabla cargada en el modelo.

    Por lo tanto, obtenga datos de SQL Server en Power Query, seleccione la tabla o vista Industry_Summary.
    En la pestaña Inicio, haga clic en el botón Elegir columnas y desmarque Seleccionar todo y, a continuación, marque
    RPT_PRD_END_DT, MTH_CTGRY, BRWR_DSC, WAPD_NUM, WAPD_DEN
    para seleccionar esas columnas.
    Seleccione WAPD_NUM, WAPD_DEN columnas y redondee a dos decimales en la pestaña Transformar.
    Seleccione RPT_PRD_END_DT columna y filtrela: puede hacerlo mediante el filtrado avanzado en la lista desplegable.

    Cierre y aplique cambios para cargar en el modelo de datos.

    No estoy seguro de dónde ha salido esta columna: BRWR_RPT_RIC_SMY_DSC
    Pero puede crear un objeto visual de matriz con su grupo por columnas: RPT_PRD_END_DT, BRWR_RPT_RIC_SMY_DSC en Filas. A continuación, cree una medida que calcule:

    WAPD_PCT de la WAPD_PCT (SUM(WAPD_den)-0 ,BLANK(), DIVIDE(SUM(WAPD_NUM), SUM(WAPD_den) )

    Por último, cree otro objeto visual de matriz con BRWR_DSC en columnas y cree una medida:

    Promedio de WAPD_PCT - PROMEDIO(WAPD_PCT)

    Espero que ayude y tenga sentido. Avísame cómo te llevas.