Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Administrator
3 years ago
Solved

GENERATESERIES con SELECTEDVALUE

El archivo de muestra PBIX está aquí: https://drive.google.com/file/d/13w7kMB_WKJABXnezPOrQhqlOFUXP4Wcl/view?usp=sharing

Estoy tratando de permitir que un usuario cree efectivamente una tabla calculada de un punto de inicio y un punto final entre dos meses usando GENERATESERIES. En la captura de pantalla a continuación, puedo ingresar el "Mes de inicio" y la "Duración" y eso funciona bien.

Cuando creo una tabla calculada (o parámetro) usando lo siguiente, obtengo un error "Los argumentos en la función GenerateSeries no pueden estar en blanco"

¿Alguna forma de solucionar / resolver esto? ¡Gracias!

Parameter = 

GENERATESERIES(
    _Measures[Measure - Start Month]
    , 60
    , 1)

  • @v-cgao-msft Gracias.

    Lo siguiente es tanto para mí como para otros que se encuentran con este feed. PowerBI no puede crear una nueva tabla calculada utilizando la entrada de segmentaciones de datos. Sin embargo, puede crear una tabla calculada virtual en una medida que puede obtener los resultados que desea, pero es difícil de auditar. En consecuencia, le recomiendo que cree una tabla calculada con entradas "codificadas" para auditar/programar/compilar, mientras replica la salida de medida que busca utilizando la tabla virtual con fines dinámicos.

    Esta es mi tabla calculada de auditoría. Notará que el RETORNO tiene que ser una tabla.

    zzNewTable = 
    
    VAR StrtDate =
        DATE ( 2023, 6, 1 )
    
    VAR EndDate = 
        EOMONTH(StrtDate,60+1)
    
    VAR CalMth =
    
        GENERATESERIES (
            0,
            DATEDIFF (
                StrtDate,
                EndDate,
                MONTH
            ),
            1
        )
    
    
    // NetRent = AcquisitionCost * LRF * (1-TechServicingFee)
    VAR NetRent =   
             10000 * 0.015 * (1-0.05)
    
    // Deployment = AcquisitionCost - LeaseTransactionCosts
    VAR Deployment =   
             10000 + 50
    
    
    // Exit = AcquisitionCost * RV% - LeaseTransitionCosts
    VAR Exit =   
             10000 * 0.75 - 50
    
    
    VAR T1_1 = 
        ADDCOLUMNS(
            CalMth,
            "Date",
                IF([Value]=0,EOMONTH(StrtDate,[Value]),EOMONTH(StrtDate,[Value]-1)+1),
            "@AcqCost",
            10000,        
            "@LRF",
            0.015,
            "@RV%",
            0.75,
            "@LeaseTerm",
            60,
            "@NetRent",
                IF([Value]=0,(-1)*Deployment,IF([Value]=61,Exit,NetRent)) ,
            
            
            "@StartMonth",
            6
        )
    
    VAR UnlevIRR = 
        XIRR(T1_1,[@NetRent],[Date])
        
    
    RETURN
    T1_1

    Esta es mi medida. Notará que el RETORNO debe ser una medida (y no una tabla)

    zzVirtual Table Measure = 
    
    VAR StrtDate =
        DATE ( [Measure - Start Year], [Measure - Start Month], 1 )
    
    VAR EndDate = 
        EOMONTH(StrtDate,[Measure - Lease Term]+1)
    
    VAR CalMth =
        GENERATESERIES (0, DATEDIFF (StrtDate, EndDate, MONTH ), 1  )
    
    // NetRent = AcquisitionCost * LRF * (1-TechServicingFee)
    VAR NetRent =   
    //         10000 * 0.015 * (1-0.05)
        [Measure - Acquisition Price] * [Measure - Lease Rate Factor] * (1-[Measure - Technical Servicing Fee])
    
    
    
    // Deployment = AcquisitionCost - LeaseTransactionCosts
    VAR Deployment =   
    //        10000 + 50
            [Measure - Acquisition Price] + [Measure - Lease Transaction Costs]
    
    // Exit = AcquisitionCost * RV% - LeaseTransitionCosts
    VAR Exit =   
    //        10000 * 0.75 - 50
            [Measure - Acquisition Price] * [Measure - Residual Percentage] - [Measure - Lease Transaction Costs]
    
    VAR T1_1 = 
        ADDCOLUMNS(
            CalMth,
            "Date",
                IF([Value]=0,EOMONTH(StrtDate,[Value]),EOMONTH(StrtDate,[Value]-1)+1),
            "@AcqCost",
            10000,        
            "@LRF",
            0.015,
            "@RV%",
            0.75,
            "@LeaseTerm",
            60,
            "@NetRent",
                IF([Value]=0,(-1)*Deployment,IF([Value]=[Measure - Lease Term]+1,Exit,NetRent)) ,
            
            
            "@StartMonth",
            6
        )
    
    VAR UnlevIRR = 
        XIRR(T1_1,[@NetRent],[Date])
           
    RETURN
    UnlevIRR

4 Replies

  • @mrothschild ,

    El primer parámetro [Medida - Mes de inicio] está en blanco en este momento, pruebe esta medida.

    Measure - Start Month = 
     
    SELECTEDVALUE('Input - Lease Start Month'[Lease Start Month],MIN('Input - Lease Start Month'[Lease Start Month]))

    VALOR SELECCIONADO

    Se puede hacer referencia a la medida en una tabla/columna de cálculo, pero en este caso la tabla/columna de cálculo fuerza el cálculo de la medida en el contexto definido actualmente. Esta operación traduce e integra el resultado de la medida en una columna, que no se ve afectada por las acciones del usuario (por ejemplo, cambiar la segmentación de datos).

    Saludos
    Gao

    Equipo de apoyo a la comunidad

    Si hay alguna publicación de ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente. Si no entiendo sus necesidades o todavía tiene problemas al respecto, no dude en hacérnoslo saber. ¡Muchas gracias!

    Cómo obtener respuestas rápidas a sus preguntas -- Cómo proporcionar datos de ejemplo en el foro de Power BI

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Administrator

      @v-cgao-msft

      Gracias por los comentarios. Desafortunadamente, eso no resuelve el problema. El resultado previsto en este ejemplo es crear una tabla calculada que comience en el número seleccionado por el usuario en [Medida]. Entonces, en la situación anterior, la tabla consistiría en una columna de números enteros del 2 al 60. Si cambiara "Mes de inicio de arrendamiento" a 6, cambiaría de 6 a 60.

      Aquí está el resultado de lo que proporcionó su sugerencia:

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Administrator

        @mrothschild ,

        Se puede hacer referencia a la medida en una tabla/columna de cálculo, pero en este caso la tabla/columna de cálculo fuerza el cálculo de la medida en el contexto definido actualmente. Esta operación traduce e integra el resultado de la medida en una columna, que no se ve afectada por las acciones del usuario (por ejemplo, cambiar la segmentación de datos).

        En el modo de importación, las columnas o tablas calculadas se almacenan en la memoria y se vuelven a calcular solo cuando se actualiza la tabla o la memoria, y el usuario cambia el comportamiento de la segmentación de datos no afecta a las columnas o tablas calculadas.

        Supongo que desea crear una tabla dinámica basada en los valores seleccionados de la segmentación de datos, pero eso no es posible.

        Puedes votar por una idea similar.

        Saludos
        Gao

        Equipo de apoyo a la comunidad

        Saludos
        Gao

        Equipo de apoyo a la comunidad

        Si hay alguna publicación de ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente. Si no entiendo sus necesidades o todavía tiene problemas al respecto, no dude en hacérnoslo saber. ¡Muchas gracias!

        Cómo obtener respuestas rápidas a sus preguntas -- Cómo proporcionar datos de ejemplo en el foro de Power BI

  • @v-cgao-msft Gracias.

    Lo siguiente es tanto para mí como para otros que se encuentran con este feed. PowerBI no puede crear una nueva tabla calculada utilizando la entrada de segmentaciones de datos. Sin embargo, puede crear una tabla calculada virtual en una medida que puede obtener los resultados que desea, pero es difícil de auditar. En consecuencia, le recomiendo que cree una tabla calculada con entradas "codificadas" para auditar/programar/compilar, mientras replica la salida de medida que busca utilizando la tabla virtual con fines dinámicos.

    Esta es mi tabla calculada de auditoría. Notará que el RETORNO tiene que ser una tabla.

    zzNewTable = 
    
    VAR StrtDate =
        DATE ( 2023, 6, 1 )
    
    VAR EndDate = 
        EOMONTH(StrtDate,60+1)
    
    VAR CalMth =
    
        GENERATESERIES (
            0,
            DATEDIFF (
                StrtDate,
                EndDate,
                MONTH
            ),
            1
        )
    
    
    // NetRent = AcquisitionCost * LRF * (1-TechServicingFee)
    VAR NetRent =   
             10000 * 0.015 * (1-0.05)
    
    // Deployment = AcquisitionCost - LeaseTransactionCosts
    VAR Deployment =   
             10000 + 50
    
    
    // Exit = AcquisitionCost * RV% - LeaseTransitionCosts
    VAR Exit =   
             10000 * 0.75 - 50
    
    
    VAR T1_1 = 
        ADDCOLUMNS(
            CalMth,
            "Date",
                IF([Value]=0,EOMONTH(StrtDate,[Value]),EOMONTH(StrtDate,[Value]-1)+1),
            "@AcqCost",
            10000,        
            "@LRF",
            0.015,
            "@RV%",
            0.75,
            "@LeaseTerm",
            60,
            "@NetRent",
                IF([Value]=0,(-1)*Deployment,IF([Value]=61,Exit,NetRent)) ,
            
            
            "@StartMonth",
            6
        )
    
    VAR UnlevIRR = 
        XIRR(T1_1,[@NetRent],[Date])
        
    
    RETURN
    T1_1

    Esta es mi medida. Notará que el RETORNO debe ser una medida (y no una tabla)

    zzVirtual Table Measure = 
    
    VAR StrtDate =
        DATE ( [Measure - Start Year], [Measure - Start Month], 1 )
    
    VAR EndDate = 
        EOMONTH(StrtDate,[Measure - Lease Term]+1)
    
    VAR CalMth =
        GENERATESERIES (0, DATEDIFF (StrtDate, EndDate, MONTH ), 1  )
    
    // NetRent = AcquisitionCost * LRF * (1-TechServicingFee)
    VAR NetRent =   
    //         10000 * 0.015 * (1-0.05)
        [Measure - Acquisition Price] * [Measure - Lease Rate Factor] * (1-[Measure - Technical Servicing Fee])
    
    
    
    // Deployment = AcquisitionCost - LeaseTransactionCosts
    VAR Deployment =   
    //        10000 + 50
            [Measure - Acquisition Price] + [Measure - Lease Transaction Costs]
    
    // Exit = AcquisitionCost * RV% - LeaseTransitionCosts
    VAR Exit =   
    //        10000 * 0.75 - 50
            [Measure - Acquisition Price] * [Measure - Residual Percentage] - [Measure - Lease Transaction Costs]
    
    VAR T1_1 = 
        ADDCOLUMNS(
            CalMth,
            "Date",
                IF([Value]=0,EOMONTH(StrtDate,[Value]),EOMONTH(StrtDate,[Value]-1)+1),
            "@AcqCost",
            10000,        
            "@LRF",
            0.015,
            "@RV%",
            0.75,
            "@LeaseTerm",
            60,
            "@NetRent",
                IF([Value]=0,(-1)*Deployment,IF([Value]=[Measure - Lease Term]+1,Exit,NetRent)) ,
            
            
            "@StartMonth",
            6
        )
    
    VAR UnlevIRR = 
        XIRR(T1_1,[@NetRent],[Date])
           
    RETURN
    UnlevIRR