Сложности на колоните в 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 файла се е променила, са следните:

  1. Създайте заявка, която се свързва с източника на данни, подобно на заявката GetSourceData от горния пример.
  2. Създайте заявка, която винаги връща таблица с необходимите колони, но без редове.
  3. Добавете втора таблица към първата. Резултатът ще бъде таблица, съдържаща всички колони от двете таблици.
  4. Изтрийте ненужните колони.

Във втората стъпка има няколко начина за създаване на празна таблица. Можете да използвате функцията #table(). Следният ред код демонстрира как да направите това.

power

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

desktop

След това го транспонирайте, използвайте първия ред на получената таблица като заглавен ред и задайте типовете данни за всяка колона.

Нека тази заявка се нарича ExpectedColumns.

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

power

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

desktop

Въпреки че колоната Месец е загубила всички имена на месеци и съдържа само нулеви стойности, няма да бъдат повдигнати допълнителни грешки.

Трети код на заявка:

Като бонус още един код за заявка. В негоколоните от GetSourceData и ExpectedColumns се сравняват, след което се показва списък с добавени/премахнати колони.

Проверка дали съществуват колони в източник на данни на Power Query

Понякога е необходима проста проверка, за да се гарантира, че всички необходими колони съществуват в източника на данни. За това ще ни помогне функцията Table.HasColumns().

Нека проверим нашия csv файл за наличието на три колони Продукт, Месец и Продажби. Следната заявка връща TRUE, ако източникът на данни има всички колони и FALSE в противен случай: