Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
6 years ago

Devolver filtro virtual con SWITCH

Quiero filtrar una tabla, por diferentes atributos dependiendo del valor seleccionado en la segmentación de datos.

Así que para entender lo que tengo, esta es una tabla de localidades (... No sé si algún país de habla inglesa los usa, pero los encontré en el diccionario, y los usamos en México), de todos modos sus columnas son:

locality:  key, name, soc_eco, size, urb_rur, municipality, population, etc...

Así que hay tres atributos principales para filtrar por: soc_eco, tamaño, urban_rural; y para el propósito de este ejemplo, vamos a centrarnos en agregar población.

He creado tablas manuales para esos atributos para vincular los valores correspondientes:

Attributes:  
 value  | name | order
soc_eco | NSE  |  1
size    | Size |  2
urb_rur | U/R  |  3

Attr.Values:
 attr     | value | match |  rel_order
soc_eco   | low   | 1     |  1
soc_eco   | med   | 2     |  2
...       | ...   | ...   | ...
size      | small | 1     |  1
size      | med   | 2     |  2
...       | ...   | ...   | ...
urb_rur   | urban | U     |  1
urb_rur   | rural | R     |  2

Lo que puedo hacer:

Pop_Measure = SWITCH( SELECTEDVALUE(attribute[value]), 
    "soc_eco", CALCULATE( SUM(localities[population]), 
        TREATAS( VALUES(attr_values[match]), localities[soc_eco]) ),
    "size",    CALCULATE( SUM(localities[population]), 
        TREATAS( VALUES(attr_values[match]), localities[size]) ),
    "urb_rur", CALCULATE( SUM(localities[population]), 
        TREATAS( VALUES(attr_values[match]), localities[urban_rural]) ),
             SUM(localities[population]) 
    ))

Sin embargo, tengo varias medidas como esta, y estoy buscando no repetir el relleno y guardarlo como una tabla calculada para usar en otras medidas.
La siguiente tabla calculada produce un error:

LocalityByAttr = SWITCH( SELECTEDVALUE(attributes[value]), 
    "soc_eco", TREATAS( VALUES(attr_value[match]), localities[soc_eco] ),
    "size",    TREATAS( VALUES(attr_value[match]), localities[size] ), 
    "urb_rur", TREATAS( VALUES(attr_value[match]), localities[urb_rur] ), 
            localities)

El error es:

The expression refers to multiple columns.  Multiple columns cannot be converted to a scalar value. 

¿Alguien sabe cómo darle la vuelta a esto? ¿Es esto posible?
Gracias.

5 Replies

  • sturlaws's avatar
    sturlaws
    Resident Rockstar

    Hola, @Diego-CDMX,

    No estoy seguro de lo que está tratando de hacer, pero una tabla calculada no puede ser reutilizada por otras medidas.

    Salud
    Sturla

    • Anonymous's avatar
      Anonymous
      Not applicable

      Lo que intento hacer es esto.
      Establezca los valores de Atributo en una segmentación de datos (selección única).
      Y luego tener diferentes visualizaciones basadas en el atributo de localidad que se selecciona, esto puede ser cualquiera de los índices urbanos/rurales, de localidad o socioeconómico.

      El problema no está en la creación de la medida, sino en el almacenamiento del filtro intermedio.


      Ya lo he logrado, y se ve muy bien.
      Pero sería mucho mejor, si dicho filtro se pudiera establecer en una variable u objeto diferente para que la codificación sea más clara.

      Incluso dentro de la misma medida, no es posible lo siguiente:

      Pop_by_attr = 
      VAR ByAttr = SWITCH( SELECTEDVALUE(attributes[value]), 
        "soc_eco",  TREATAS( VALUES(attr_values[match]), localities[soc_eco]), 
        "size"   ,  TREATAS( VALUES(attr_values[match]), localities[size]), 
        "urb_rur",  TREATAS( VALUES(attr_values[match]), localities[urb_rur]), 
             localities)
      RETURN CALCULATE( SUM(localities[population]), ByAttr)

      Me da el mismo error.

      • v-yingjl's avatar
        v-yingjl
        Community Support

        Hola @Diego-CDMX ,

        Puede intentar utilizar variables para guardar parte de los valores para evitar comillas repetidas en su medida, tal vez como esta:

        Pop_Measure =
        VAR _values =
            VALUES ( attr_values[match] )
        VAR _sum =
            SUM ( localities[population] )
        RETURN
            SWITCH (
                SELECTEDVALUE ( attribute[value] ),
                "soc_eco", CALCULATE ( _sum, TREATAS ( _values, localities[soc_eco] ) ),
                "size", CALCULATE ( _sum, TREATAS ( _values, localities[size] ) ),
                "urb_rur", CALCULATE ( _sum, TREATAS ( _values, localities[urban_rural] ) ),
                _sum
            )

        Best Looks,
        Yingjie Li

        Si este post ayuda, por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

  • v-yingjl's avatar
    v-yingjl
    Community Support

    Hola @Diego-CDMX ,

    Si ha solucionado el problema por su cuenta, por favor comparta su solución. Si la ayuda de los mensajes anteriores, por favor márquela como una solución para ayudar a otros a encontrarlo más rápidamente. ¡Gracias!


    Best Looks,
    Yingjie Li