automatic summation of values

Hello! I have been struggeling with a code i have written where I want to autocalculate a value in one column by these constraints:

  • Check if there are any records with the same DeklarasjonsNr.
  • If records exist, check if the current row matches Stativ nr and DeklarasjonsNr.
  • If all criteria are met, return the minimum Vindu nr from the matching set.
  • If only DeklarasjonsNr and Stativ nr match, return the maximum Vindu nr incremented by 1.
  • Otherwise, return 1.

So i did this:

IF(
ISNOTBLANK(
ANY(
SELECT(
PCB Ruterretur[Vindu nr],
[DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr]))),
IF(
AND(
[DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
[Stativ nr] = [_THISROW].[Stativ nr]),
IF(
AND(
[Produsent/Produksjonssted] = [_THISROW].[Produsent/Produksjonssted],
[Årstall] = [_THISROW].[Årstall],
[Merking i Avstandslist] = [_THISROW].[Merking i Avstandslist],
[Navn på Ukjent Produsent] = [_THISROW].[Navn på Ukjent Produsent]),
MIN(
SELECT(
PCB Ruterretur[Vindu nr],
AND(
[Produsent/Produksjonssted] = [_THISROW].[Produsent/Produksjonssted],
[Årstall] = [_THISROW].[Årstall],
[Merking i Avstandslist] = [_THISROW].[Merking i Avstandslist],
[DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
[Stativ nr] = [_THISROW].[Stativ nr],
[Navn på Ukjent Produsent] = [_THISROW].[Navn på Ukjent Produsent]))),
MAX(
SELECT(
PCB Ruterretur[Vindu nr],
AND(
[DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
[Stativ nr] = [_THISROW].[Stativ nr]))) + 1),
1),1)

However i dont get the code to do that, it just returns 1. 

could someone help me with the code so that it works?

this is my table:

minashe_1-1720011448216.png

 

 

 

 

Solved Solved
0 13 241
1 ACCEPTED SOLUTION

Maybe this will get what you are looking for:

IF(COUNT(SELECT(PCB Ruterretur[Vindu nr],AND(
[Produsent/Produksjonssted] = [_THISROW].[Produsent/Produksjonssted],
[Årstall] = [_THISROW].[Årstall],
[Merking i Avstandslist] = [_THISROW].[Merking i Avstandslist],
[DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
[Stativ nr] = [_THISROW].[Stativ nr],
[Navn på Ukjent Produsent] = [_THISROW].[Navn på Ukjent Produsent],[Row ID]<>[_thisRow].[Row ID])))>0,MIN(SELECT(PCB Ruterretur[Vindu nr],AND(
[Produsent/Produksjonssted] = [_THISROW].[Produsent/Produksjonssted],
[Årstall] = [_THISROW].[Årstall],
[Merking i Avstandslist] = [_THISROW].[Merking i Avstandslist],
[DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
[Stativ nr] = [_THISROW].[Stativ nr],
[Navn på Ukjent Produsent] = [_THISROW].[Navn på Ukjent Produsent],[Row ID]<>[_thisRow].[Row ID]))),IF(COUNT(SELECT(PCB Ruterretur[Vindu nr],AND([DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
[Stativ nr] = [_THISROW].[Stativ nr],[Row ID]<>[_thisRow].[Row ID])))>0,MAX(SELECT(PCB Ruterretur[Vindu nr],AND([DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
[Stativ nr] = [_THISROW].[Stativ nr],[Row ID]<>[_thisRow].[Row ID])))+1,1))

View solution in original post

13 REPLIES 13

Can you clarify the difference between these two:

  • If all criteria are met (current row matches Stativ nr and DeklarasjonsNr)
  • If only DeklarasjonsNr and Stativ nr match,

All criteria are: 

AND(
[Produsent/Produksjonssted] = [_THISROW].[Produsent/Produksjonssted],
[Årstall] = [_THISROW].[Årstall],
[Merking i Avstandslist] = [_THISROW].[Merking i Avstandslist],
[DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
[Stativ nr] = [_THISROW].[Stativ nr],
[Navn på Ukjent Produsent] = [_THISROW].[Navn på Ukjent Produsent])

while the second point is only:

AND([DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
[Stativ nr] = [_THISROW].[Stativ nr])

 

Maybe this will get what you are looking for:

IF(COUNT(SELECT(PCB Ruterretur[Vindu nr],AND(
[Produsent/Produksjonssted] = [_THISROW].[Produsent/Produksjonssted],
[Årstall] = [_THISROW].[Årstall],
[Merking i Avstandslist] = [_THISROW].[Merking i Avstandslist],
[DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
[Stativ nr] = [_THISROW].[Stativ nr],
[Navn på Ukjent Produsent] = [_THISROW].[Navn på Ukjent Produsent],[Row ID]<>[_thisRow].[Row ID])))>0,MIN(SELECT(PCB Ruterretur[Vindu nr],AND(
[Produsent/Produksjonssted] = [_THISROW].[Produsent/Produksjonssted],
[Årstall] = [_THISROW].[Årstall],
[Merking i Avstandslist] = [_THISROW].[Merking i Avstandslist],
[DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
[Stativ nr] = [_THISROW].[Stativ nr],
[Navn på Ukjent Produsent] = [_THISROW].[Navn på Ukjent Produsent],[Row ID]<>[_thisRow].[Row ID]))),IF(COUNT(SELECT(PCB Ruterretur[Vindu nr],AND([DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
[Stativ nr] = [_THISROW].[Stativ nr],[Row ID]<>[_thisRow].[Row ID])))>0,MAX(SELECT(PCB Ruterretur[Vindu nr],AND([DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
[Stativ nr] = [_THISROW].[Stativ nr],[Row ID]<>[_thisRow].[Row ID])))+1,1))

Omg this worked perfectly!! Would you mind giving me a feedback on why my code didn't work? Thank you!!!

It looks like your code is written as with all the IF statements in the beginning progressing through stages, and the results for the IF statements all at the end.

IF X -> IF Y -> IF Z - > THAN A -> THAN -> B -> THAN C

The structure needs to be:

IF X -> THAN Y -> IF NOT X -> THAN Z

To have more than one IF statement, you just need to have the Z begin a new IF statement and repeat:

IF X -> THAN Y -> IF NOT X -> THAN IF Z -> THAN A -> IF NOT Z -> THAN B

Once you provided me with the two conditions, you had already stumbled on the answer. 

X) IF the following list is not blank:

AND(
[Produsent/Produksjonssted] = [_THISROW].[Produsent/Produksjonssted],
[Årstall] = [_THISROW].[Årstall],
[Merking i Avstandslist] = [_THISROW].[Merking i Avstandslist],
[DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
[Stativ nr] = [_THISROW].[Stativ nr],
[Navn på Ukjent Produsent] = [_THISROW].[Navn på Ukjent Produsent],)

Y) Than get the MIN value from the list. 

IF NOT X, THAN Z

Z) IF the following list is not blank:

AND([DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
[Stativ nr] = [_THISROW].[Stativ nr])

A) Than get the MAX value from the list +1

IF both of the lists above are blank, THAN B

B. Put 1

The only thing I added to each of the lists you provided was [Row ID]<>[_thisRow].[Row ID] as a way to avoid the list self-referencing. 

 

 

 


@minashe wrote:

IF(
ISNOTBLANK(
ANY(
SELECT(
PCB Ruterretur[Vindu nr],
[DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr]))),
IF(
AND(
[DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
[Stativ nr] = [_THISROW].[Stativ nr]),
IF(
AND(
[Produsent/Produksjonssted] = [_THISROW].[Produsent/Produksjonssted],
[Årstall] = [_THISROW].[Årstall],
[Merking i Avstandslist] = [_THISROW].[Merking i Avstandslist],
[Navn på Ukjent Produsent] = [_THISROW].[Navn på Ukjent Produsent]),
MIN(
SELECT(
PCB Ruterretur[Vindu nr],
AND(
[Produsent/Produksjonssted] = [_THISROW].[Produsent/Produksjonssted],
[Årstall] = [_THISROW].[Årstall],
[Merking i Avstandslist] = [_THISROW].[Merking i Avstandslist],
[DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
[Stativ nr] = [_THISROW].[Stativ nr],
[Navn på Ukjent Produsent] = [_THISROW].[Navn på Ukjent Produsent]))),
MAX(
SELECT(
PCB Ruterretur[Vindu nr],
AND(
[DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
[Stativ nr] = [_THISROW].[Stativ nr]))) + 1),
1),1)

 


 

If you could translate everything expression and table I could help you easily. 

IF(
ISNOTBLANK(
ANY(
SELECT(
PCB Ruterretur[Vindu nr],
[DeclarationNr] = [_THISROW].[DeclarationNr]))),
IF(
AND(
[DeclarationNr] = [_THISROW].[DeclarationNr],
[Stand nr] = [_THISROW].[Stand nr]),
IF(
AND(
[Producer] = [_THISROW].[Producer],
[Year] = [_THISROW].[Year],
[Marking in Distance list] = [_THISROW].[Marking in Distance list],
[Name of Unknown Manufacturer] = [_THISROW].[Name of Unknown Manufacturer]),
MIN(
SELECT(
PCB Ruterretur[Vindu nr],
AND(
[Producer] = [_THISROW].[Producer],
[Year] = [_THISROW].[Year],
[Marking in Distance list] = [_THISROW].[Marking in Distance list],
[DeclarationNr] = [_THISROW].[DeclarationNr],
[Stand nr] = [_THISROW].[Stand nr],
[Name of Unknown Manufacturer] = [_THISROW].[Name of Unknown Manufacturer]))),
MAX(
SELECT(
PCB Ruterretur[Vindu nr],
AND(
[DeclarationNr] = [_THISROW].[DeclarationNr],
[Stand nr] = [_THISROW].[Stand nr]))) + 1),
1),1)

 

minashe_0-1720032447685.png

 

 

still case not solved?

 

Its is solved now!

 

Just a try  using chatGPT :

 

IF(
  ISNOTBLANK(
    FILTER(
      "PCB Ruterretur",
      AND(
        [DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
        NOT(IN([_ROWNUMBER], LIST([_THISROW].[RowNumber])))
      )
    )
  ),
  IF(
    AND(
      [DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
      [Stativ nr] = [_THISROW].[Stativ nr]
    ),
    IF(
      AND(
        ISNOTBLANK(
          FILTER(
            "PCB Ruterretur",
            AND(
              [DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
              [Stativ nr] = [_THISROW].[Stativ nr],
              [Produsent/Produksjonssted] = [_THISROW].[Produsent/Produksjonssted],
              [Årstall] = [_THISROW].[Årstall],
              [Merking i Avstandslist] = [_THISROW].[Merking i Avstandslist],
              [Navn på Ukjent Produsent] = [_THISROW].[Navn på Ukjent Produsent]
            )
          )
        ),
        MIN(
          SELECT(
            PCB Ruterretur[Vindu nr],
            AND(
              [DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
              [Stativ nr] = [_THISROW].[Stativ nr],
              [Produsent/Produksjonssted] = [_THISROW].[Produsent/Produksjonssted],
              [Årstall] = [_THISROW].[Årstall],
              [Merking i Avstandslist] = [_THISROW].[Merking i Avstandslist],
              [Navn på Ukjent Produsent] = [_THISROW].[Navn på Ukjent Produsent]
            )
          )
        ),
        MAX(
          SELECT(
            PCB Ruterretur[Vindu nr],
            AND(
              [DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr],
              [Stativ nr] = [_THISROW].[Stativ nr]
            )
          )
        ) + 1
      )
    ),
    1
  ),
  1
)

 

I have another question, I am trying to calculate the number of windows with one specific state on "Sortering " table based on the "PCB Ruterretur" table using the formula below as initial value, but the values here wont show up either. Could someone help me fix this issue? I would be very thankful!

 

IF([Material Type] = "PCB",
count(select(PCB Ruterretur[Tilstand],
and([DeklarasjonsNr] = [_THISROW].[DeklarasjonsNr], [Row ID]<> [_THISROW].[Row ID],
[Tilstand] = "Vindu hel"))),
0)

Can you provide screen shots of the two tables, PCB Ruterretur and Sortering, so I can see the column structures?

 

PCB Ruterretur table:

minashe_1-1720682267016.png

Sortering table:

minashe_2-1720682320815.pngminashe_3-1720682335816.png

 

 

 

Top Labels in this Space