Сложности на колоните в Power Query, Microsoft Power BI Desktop Tutorial Blog
Текстът е адаптиран превод на статии от Chris Webb (Chris Webb), оригиналът е Ensuring Columns Are Always Present In A Table Returned By Power Query и Checking Columns Are Present In Power Query. Разглежда се англоезичната Power Query.
Крис Уеб е независим технологичен консултант за Analysis Services, MDX, Power Pivot, DAX, Power Query и Power BI. Неговият блог е съкровищница от информация за тези технологии. Повече от 10 години пише за BI решения от Microsoft. Броят на статиите му надхвърли 1000! Крис също говори на голям брой различни конференции като SQLBits, PASS Summit, PASS BA Conference, SQL Saturdays и участва в различни общности. Крис любезно ни позволи да преведем статиите му на български. И това е едно от тях.
Тънкостите на работа с колони в Power Query
Изчезването или преименуването на колони може да причини много проблеми при работа с Power Query. Като например: грешки при актуализиране на заявка, нарушаване на изчисленията в обобщени таблици, независимо преформатиране на последните, изискващи ръчна корекция. Така че би било хубаво да се изгради логиката на заявката по такъв начин, че необходимите колони да бъдат предоставени в върнатата таблица.
Помислете за следния csv файл:

Ако създадем заявка и се свържем с файл, получаваме нещо подобно:
Да предположим, че нашата заявка се нарича GetSourceData. Нека приемем също, че изходът трябва да бъде таблица с три колони: Продукт, Месец и Продажби. В този случай Продуктът и Месецът трябва да са в текстов формат, а Продажбите трябва да са числови. Основните стъпки, за да се гарантира това, дори ако структурата на csv файла се е променила, са следните:
- Създайте заявка, която се свързва с източника на данни, подобно на заявката GetSourceData от горния пример.
- Създайте заявка, която винаги връща таблица с необходимите колони, но без редове.
- Добавете втора таблица към първата. Резултатът ще бъде таблица, съдържаща всички колони от двете таблици.
- Изтрийте ненужните колони.
Във втората стъпка има няколко начина за създаване на празна таблица. Можете да използвате функцията #table(). Следният ред код демонстрира как да направите това.

Ако искате крайният потребител да може да конфигурира резултата за себе си, можете да използвате електронна таблица на Excel. Например така:

След това го транспонирайте, използвайте първия ред на получената таблица като заглавен ред и задайте типовете данни за всяка колона.
Нека тази заявка се нарича ExpectedColumns.
Създаването на трета заявка, която добавя ExpectedColumns в края на заявката GetSourceData, е тривиално. Ако всички очаквани колони присъстват в заявката GetSourceData, нищо няма да се промени. Ако желаните колони са преименувани или изтрити, тогава ще получим таблица, която ще съдържа всички колони от двете заявки. Например, ако преименуваме месец на месеци, получаваме следния резултат:

И накрая, в третата заявка изберете желаните колони (т.е. тези, които са в заявката ExpectedColumns), щракнете с десния бутон и изберете Премахване на други колони. Това ще премахне допълнителните колони. За предишния пример получаваме:

Въпреки че колоната Месец е загубила всички имена на месеци и съдържа само нулеви стойности, няма да бъдат повдигнати допълнителни грешки.
Трети код на заявка:
Като бонус още един код за заявка. В негоколоните от GetSourceData и ExpectedColumns се сравняват, след което се показва списък с добавени/премахнати колони.
Проверка дали съществуват колони в източник на данни на Power Query
Понякога е необходима проста проверка, за да се гарантира, че всички необходими колони съществуват в източника на данни. За това ще ни помогне функцията Table.HasColumns().
Нека проверим нашия csv файл за наличието на три колони Продукт, Месец и Продажби. Следната заявка връща TRUE, ако източникът на данни има всички колони и FALSE в противен случай: