Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Administrator
4 years ago
Solved

Pregunta de SQL a DAX...

Hola a todos

¡Lo que me resulta bastante natural en SQL puede resultar un poco más difícil de replicar en DAX en función de mi nivel de conocimiento actual!

Tomemos el siguiente ejemplo simple:

SELECT
	DA.Source_Plant,
  Target_Plant,
  DA.Material,
  DA.Calendar_Week_Year,
  DA.Sales_Plan,
	SQ1.Total_Sales_Plan,
	ISNULL(DA.Sales_Plan / NULLIF(SQ1.Total_Sales_Plan, 0), 0) AS Sales_Plan_Ratio
FROM
	Data_Upload AS DA
	LEFT OUTER JOIN
		(
			SELECT
				Source_Plant,
				Material,
				Calendar_Week_Year,
				SUM(Sales_Plan) AS Total_Sales_Plan
			FROM
				Data_Upload
			GROUP BY
				Source_Plant,
				Material,
				Calendar_Week_Year
		) AS SQ1
	ON SQ1.Source_Plant = DA.Source_Plant
	AND SQ1.Material = DA.Material
	AND SQ1.Calendar_Week_Year = DA.Calendar_Week_Year

Como puede ver, estamos seleccionando datos de una tabla (Data_Upload) y luego uniéndonos a la misma tabla nuevamente a través de una subconsidación (SQ1), pero esta vez con los datos agrupados en un nivel superior. Usando este método, el resultado es una tabla que me muestra el resultado de grano más bajo, así como el resultado de grano más alto, y luego puedo crear columnas calculadas contra los dos granos (por ejemplo, la columna Sales_Plan_Ratio).

Estoy bastante familiarizado con los agregadores e iteradores en DAX, así como con SUMMARIZECOLUMNS, etc., pero no conozco el mejor enfoque para abordar lo anterior. ¿Alguien tiene algún consejo que esté dispuesto a compartir, por favor?

Gracias

Matty

  • Syndicate_Admin's avatar
    Syndicate_Admin
    4 years ago

    @Matty Creo que esto sería una transalación directa.

    Table = ADDCOLUMNS(ADDCOLUMNS(Source,"Total_Sales_Plan",CALCULATE(SUM(Source[Sales_Plan]),ALLEXCEPT(Source,Source[Source_Plant], Source[Material],Source[Calendar_Week_Year])))
    "Sales_Plan_Ratio",coalesce(DIVIDE(Source[Sales_Plan],[Total_Sales_Plan]),0))

    de lo contrario, proporcione un dato de muestra y cuál es el resultado que genera TSQL

6 Replies

  • @Matty en SQL puede escribir esto como una consulta para devolver una tabla.

    En DAX, puede escribir una consulta para devolver una tabla derivada o utilizar un modelo de datos y escribir una medida para devolver lo que devolvería la consulta anterior.

    ¿Puede proporcionar más contexto sobre cuál es su intención y cómo pretende lograr esto? ¿Tabla/Medida derivada de DAX?

    Si lo que pretende es medir, ¿puede proporcionar datos de muestra y la salida deseada, de lo contrario, la sintaxis de sintaxis de SQL a DAx también es posible si desea lograr esto a través de una tabla derivada de DAX?

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Administrator

      Hay smpa01,

      Soy razonablemente bueno escribiendo medidas y creando tablas calculadas en DAX, pero no he tenido mucha suerte encontrando nada que replique lo que está haciendo la consulta SQL anterior.
      Soy consciente de las variables en DAX y estaba pensando que este tipo de tabla podría construirse a través de un par de variables, que luego se unen para lograr el resultado final. Pero no he tenido mucha suerte haciendo que nada funcione.

      ¿Alguna idea de cómo lo anterior se convertiría en DAX en forma de una tabla calculada?

      Gracias

      Matty

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Administrator

        @Matty Creo que esto sería una transalación directa.

        Table = ADDCOLUMNS(ADDCOLUMNS(Source,"Total_Sales_Plan",CALCULATE(SUM(Source[Sales_Plan]),ALLEXCEPT(Source,Source[Source_Plant], Source[Material],Source[Calendar_Week_Year])))
        "Sales_Plan_Ratio",coalesce(DIVIDE(Source[Sales_Plan],[Total_Sales_Plan]),0))

        de lo contrario, proporcione un dato de muestra y cuál es el resultado que genera TSQL