I would transform the source per The Crosstable Load into a normal data-structure like your scenario two and you could add per left join an aggregation-load with count(YearMonth) on Customer and a where-clause on the Values which aren't NULL of these data to get the number of months with Values for each Customer - and you might take this result to compare it against your expected result to flag them.
If you really want to check that each monthly Value is higher as certain threshold than you will need to use interrecord-functions within a sorted resident-load to check the values of the previous loaded records - for this see here: Peek() or Previous() ?
Suppose the data is in the "data_table" in the form of Scenario 2.
The below code first creates a new column "value_check" which has 1 in a row if all the "Values" are 10 for a Customer till that row. Then for every Customer we check the last Value. I am assuming the data is ordered by Customer, MonthYear.
This way you get a new table with Customers and the "flap" value.
if(peek(Customer)=Customer and peek(Values)=Values
and Values=10 and peek(value_check)<>0,1,
if(peek(Customer)<>Customer and Values=10,1,0)) as value_check