Prepare the asparagus: snap off the woody ends. Chop off the tips and set aside. Chop the remainder into 1/4 inch pieces. Set aside.
In a large pot, melt the butter over medium heat. Add the onions and saute for 2 minutes. Add the asparagus (but not the tips) and continue to saute until the asparagus and onion are tender, about 3-5 minutes.
In a small bowl, combine flour, salt, and pepper.
Use a wooden spoon to move the veggies to on side of the pot. Melt 1 tablespoon butter on the bottom of the pot. When it is hot, add the flour mixture and whisk it together to make a paste. Try to keep the veggies on the other side of the pan. Cook the mixture for about a minute, then add the broth in small increments, whisking between each addition. Whisk out any lumps. Add the milk and combine. (See photos.)
Bring the mixture to a boil, then reduce to a simmer. Simmer for about 10 minutes.
Meanwhile in a small saucepan, add 1 1/2 cups water and 1/2 teaspoon salt. Bring to a boil over high heat. When it is at a rolling boil, add the reserved asparagus tips. Cover and cook for 2 minutes. Immediately drain in a colander and rinse with cold water to stop the cooking process. Set aside.
Turn off the heat when the soup is done simmering. Puree the soup with an immersion blender. (Or use a regular blender. Do it in small batches and leave the spout on top open to allow steam to escape. Hold a towel over it to catch any splashes. Return the soup to the pot.)
Add the yogurt, lemon juice, and Parmesan. Add salt and pepper to taste. If the soup has cooled, heat on high, stirring until the soup is as hot as you like. Serve with the reserved asparagus tips and shredded Parmesan.