Forum Discussion

Gp2024's avatar
Gp2024
Frequent Visitor
2 years ago
Solved

Creating a column based on the value of a filtered table

Hello everyone,

I'm looking to create a new column that will extract values from a different table within my queries. Essentially, I have a table X with a column containing IDs, a column with dates ([pfg_inivig]), and a column with corresponding values. Additionally, I have a table Y that will store these values from table X, containing a start date, an end date, and other relevant columns.

The goal is to extract the first value from table X where the ID matches the desired value and where the date [pfg_inivig] falls within the range defined by the start and end dates of table Y. The code for this operation is provided below:

 

 

 

 

    Tabela_Bandeiras = Bandeira_Valores,
    #"Filtrar e Comparar Datas" = Table.AddColumn(#"Tipo Alterado", "te_bAm", each 
    let
        linhaAtual = _,
        DataStart = linhaAtual[dt_inicio_vigencia],
        DataEnd = linhaAtual[dt_fim_vigencia],
        bandeira = Table.SelectRows(Tabela_Bandeiras, each [pfg_codban] = "000004"),
        tab_data = Table.SelectRows(bandeira, each [pfg_inivig] >= DataStart and [pfg_inivig] <= DataEnd),
        valorBandeira = if Table.RowCount(bandeira) > 0 then bandeira{0}[pfg_valor] else null
    in
        valorBandeira, type number)
in
    #"Filtrar e Comparar Datas"

 

 

 

 

Thank you for your attention, and any assistance is appreciated. Additionally, it seems that when I write my code, the date doesn't filter correctly.

EDIT:
Tabela_Bandeira (table X) ->

pfg_codbanpfg_inivigpfg_valor
00000201/04/20247877
00000401/04/20241885
00000101/04/20244463
00000101/07/202265
00000101/07/202265
00000401/07/20222989
00000201/07/20229795
00000201/07/20229795
00000801/04/202271
00000401/09/2021142
00000701/09/20211,42
00000201/07/20219492

Table Y the original table that I want to get values from table X -> 

cd_classe_tensaodt_inicio_vigenciadt_fim_vigencia
AS04/07/201631/03/2017
A301/06/201626/08/2016
B230/07/202129/07/2022
A3a30/07/202229/07/2023
A3a02/03/201527/08/2015
A322/07/202321/07/2024


Expected Result (The values of table X inserted in Table Y) ->

cd_classe_tensaodt_inicio_vigenciadt_fim_vigenciate_bAm
AS04/07/201631/03/20170
A301/06/201626/08/20160
B230/07/202129/07/2022142
A3a30/07/202229/07/20232989
A3a02/03/201527/08/20150
A322/07/202321/07/20242989
  • Hi Gp2024, your request is confusing. Maybe you want this but there is no [ID] connection between your tables. I've filtered [pfg_codban] = 4 at last step.

     

    Result

    let
        TableX = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("jc5BDsAgCATAv3g2KVAUeIvx/9+oJE206KHcyGSz21oCP0o5AV7AFwHxeERFUs8vc2RULZMxMnO9dxZnb6qH7BE5IpnaZIpsYuU367raWXBvNkffiExTZdO88qfY2dgG9wc=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [pfg_codban = _t, pfg_inivig = _t, pfg_valor = _t]),
        ChangedTypeTableX = Table.TransformColumnTypes(TableX,{{"pfg_codban", Int64.Type}, {"pfg_inivig", type date}}, "sk-SK"),
        TableY = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("Tc49DoAgDIbhu3Qmafn401Gv4EgYvP8lbENVxpc8bemdjosCSWZpDIlVI0WWZNFoBAXJgL7VF6CybDMMnLAhmRsQDewe8A33KrCKtAiBHy4mmh8p/y+Ab0ojemQa4wE=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [cd_classe_tensao = _t, dt_inicio_vigencia = _t, dt_fim_vigencia = _t]),
        ChangedTypeTableY = Table.TransformColumnTypes(TableY,{{"dt_inicio_vigencia", type date}, {"dt_fim_vigencia", type date}}, "sk-SK"),
        Ad_TeBam = Table.AddColumn(ChangedTypeTableY, "te_bAm", each Table.SelectRows(ChangedTypeTableX, (x)=> x[pfg_codban] = 4 and x[pfg_inivig] >= [dt_inicio_vigencia] and x[pfg_inivig] <= [dt_fim_vigencia])[pfg_valor]{0}?, type number)
    in
        Ad_TeBam

10 Replies

  • It should be possible to do that a bit simpler.

     

    Please provide sample data that covers your issue or question completely, in a usable format (not as a screenshot).

    Do not include sensitive information or anything not related to the issue or question.

    If you are unsure how to upload data please refer to https://community.fabric.microsoft.com/t5/Community-Blog/How-to-provide-sample-data-in-the-Power-BI-Forum/ba-p/963216

    Please show the expected outcome based on the sample data you provided.

    Want faster answers? https://community.fabric.microsoft.com/t5/Desktop/How-to-Get-Your-Question-Answered-Quickly/m-p/1447523

    • Gp2024's avatar
      Gp2024
      Frequent Visitor

      Thank you for the helpful suggestions. This is my first post on this forum. I have revised my initial message to offer additional details.

      • lbendlin's avatar
        lbendlin
        Super User
        let
            Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("pc5BCsAwCATAv+QcqFoT9S0h//9GKxSSmhwK9SbDsttaAj9KOQEewAcB8f2IiqSeH+bIqFoGY2Tmeq4szt5UN9ktckQytcEU2cTKZ9Z5tbPg2myOvhGZhsqieeZXsbOx/eZ+AQ==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [pfg_codban = _t, pfg_inivig = _t, pfg_valor = _t]),
            #"Changed Type" = Table.TransformColumnTypes(Source,{ {"pfg_inivig", type date}, {"pfg_valor", Int64.Type}}),
            #"Grouped Rows" = Table.Group(#"Changed Type", {"pfg_codban"}, {{"min date", each List.Min([pfg_inivig]), type nullable date}, {"max date", each List.Max([pfg_inivig]), type nullable date}, {"Value", each List.Sum([pfg_valor]), type nullable number}})
        in
            #"Grouped Rows"

        How to use this code: Create a new Blank Query. Click on "Advanced Editor". Replace the code in the window with the code provided here. Click "Done". Once you examined the code, replace the Source step with your own source.